IPB

Здравствуйте, гость ( Вход | Регистрация )

> эмулятор БК-0011М, нужна помощь
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:44
Сообщение #3


Новичок
*

Группа: Участники
Сообщений: 9
Регистрация: 22.6.2016
Пользователь №: 34 773



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

надо более детальное описание
но основное на что надо смотреть - на сколько корректно эмулируются регистры внешних устройств - тут есть отличия от БК-0010


Вероятное предназначение 041714 и 040454

1. Адрес 041714 (Очередь задач / Буфер клавиатуры)
В трассировке мы видим:
Код
MOV #041714, R5
TST (R5)+      ; Проверка: не ноль ли там?


Это классическая проверка кольцевого буфера ввода или очереди сообщений.
  1. Кто туда пишет? Скорее всего, прерывание клавиатуры (вектор 060). Когда ты нажимаешь клавишу, происходит аппаратное прерывание. Процессор останавливает этот бесконечный цикл, переходит в обработчик прерывания клавиатуры, считывает код клавиши из регистра данных (177562) и кладет его в буфер, на который указывает или который начинается с 041714.
  2. Что происходит в цикле? Диспетчер проверяет: «Появились ли новые символы?». Если TST показывает ноль — буфер пуст. Если не ноль — система забирает символ и начинает его обрабатывать (выводит на экран, передает программе и т.д.).

2. Адрес 040454 (Системные флаги / Статус)
Код проверяет конкретный бит:
Код
BIT #040000, 040454; Бит 14 (восьмеричное 040000 = бинарное 0100 0000 0000 0000)


Это Слово Состояния Системы (System Status Word). В БК-0011М системные переменные часто лежат в области 04xxxx, когда подключена системная страница.

Кто туда пишет? Сюда пишут асинхронные события (прерывания), которые происходят «за кадром»:
  1. Сетевой таймер (50 Гц, вектор 100): Каждые 20 мс таймер обновляет счетчики времени и может выставлять флаги (например, для мигания курсора или повтора клавиши).
  2. Кнопка СТОП: Нажатие кнопки СТОП часто устанавливает отдельный флаг, чтобы система знала, что нужно прервать текущий процесс. Бит 14 (040000) — очень "высокий" бит, часто используемый для флагов типа "Запрос на прерывание программы" или "Ошибка ввода-вывода".
  3. Драйвер дисковода: Если была запущена операция чтения/записи, драйвер по завершении (по прерыванию) выставляет флаг "Готово".
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения

Сообщений в этой теме


Ответить в эту темуОткрыть новую тему
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 



Текстовая версия Сейчас: 14.2.2026, 15:06