Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
| kazamul |
6.2.2026, 11:34
Сообщение
#1
|
|
Новичок ![]() Группа: Участники Сообщений: 9 Регистрация: 22.6.2016 Пользователь №: 34 773 |
Помню, что в свое время было много отличных эмуляторов под Windows.
У меня Mac, поэтому запустить их нет возможности. Появилось время, решил написать свой эмулятор на Java. БК-0010 эмулируется нормально, а с БК-0011М пока проблемы. Если кто-то сможет глянуть и подсказать, что не так — буду очень признателен. Могу при необходимости выложить весь код на GitHub. |
| kazamul |
6.2.2026, 11:57
Сообщение
#2
|
|
Новичок ![]() Группа: Участники Сообщений: 9 Регистрация: 22.6.2016 Пользователь №: 34 773 |
в принципе проблема вот в чем - я загружаю конфигурацию БК-0011М с BASIC
все начинает работать нормально пишется Монитор БК-0011 В1.8 бежит снизу вверх - а потом все заканчивается в следующем бесконечном цикле - вот что дает debug кто-нибудь может объяснить что здесь происходит - исходников не нашел - disassemble BOS.rom не дает нормального понимания Код PC=0147454: BIT #040000, 040454 (opcode=0032767) PC=0147462: BEQ 0147544 (opcode=0001427) PC=0147542: CLR (R2) (opcode=0005012) PC=0147544: SEC (opcode=0000261) PC=0147546: RTS R7 (opcode=0000207) PC=0142460: BCS 0142502 (opcode=0103407) PC=0142500: INC @#0152 (opcode=0005237) PC=0142504: CLR @#0156 (opcode=0005037) PC=0142510: MOV (R6)+, R0 (opcode=0012600) PC=0142512: MOV (R6)+, R1 (opcode=0012601) PC=0142514: MOV (R6)+, R2 (opcode=0012602) PC=0142516: MOV (R6)+, R3 (opcode=0012603) PC=0142520: MOV (R6)+, R4 (opcode=0012604) PC=0142522: MOV (R6)+, R5 (opcode=0012605) PC=0142524: MOV 040436, @#04 (opcode=0016737) PC=0142532: MOV 040434, R6 (opcode=0016706) PC=0142536: MOV @#0114, @#0177716 (opcode=0013737) PC=0142544: MOV @#0152, (R6) (opcode=0013716) PC=0142550: MOV @#0150, -(R6) (opcode=0013746) PC=0142554: BIT #04, @#0156 (opcode=0032737) PC=0142562: BNE 0142574 (opcode=0001003) PC=0142564: TST @#0177716 (opcode=0005737) PC=0142570: RTT (opcode=0000006) PC=0147576: BCC 0147616 (opcode=0103006) PC=0147600: MTPS #00 (opcode=0106427) PC=0147604: NOP (opcode=0000240) PC=0147606: MTPS #0340 (opcode=0106427) PC=0147612: BR 0147574 (opcode=0000767) PC=0147572: JSR R7, 0147410 (opcode=0004767) PC=0147406: JSR R7, 0142360 (opcode=0004767) PC=0142356: CLC (opcode=0000241) PC=0142360: MFPS @#0152 (opcode=0106737) PC=0142364: MTPS #0340 (opcode=0106427) PC=0142370: MOV (R6)+, @#0156 (opcode=0012637) PC=0142374: MOV (R6), @#0150 (opcode=0011637) PC=0142400: MOV #054002, @#0177716 (opcode=0012737) PC=0142406: MOV R6, 040434 (opcode=0010667) PC=0142412: TST @#0177716 (opcode=0005737) PC=0142416: MOV @#04, 040434 (opcode=0013767) PC=0142424: MOV #0142602, @#04 (opcode=0012737) PC=0142432: MOV #044512, R6 (opcode=0012706) PC=0142436: MOV R5, -(R6) (opcode=0010546) PC=0142440: MOV R4, -(R6) (opcode=0010446) PC=0142442: MOV R3, -(R6) (opcode=0010346) PC=0142444: MOV R2, -(R6) (opcode=0010246) PC=0142446: MOV R1, -(R6) (opcode=0010146) PC=0142450: MOV R0, -(R6) (opcode=0010046) PC=0142452: MOV R6, R2 (opcode=0010602) PC=0142454: JSR R7, @0160 (opcode=0004777) PC=0147412: MOV #041714, R5 (opcode=0012705) PC=0147416: TST (R5)+ (opcode=0005725) PC=0147420: BEQ 0147456 (opcode=0001415) PC=0147454: BIT #040000, 040454 (opcode=0032767) |
| SuperMax |
6.2.2026, 23:16
Сообщение
#3
|
![]() Администратор ![]() ![]() ![]() ![]() ![]() Группа: Root Admin Сообщений: 6 365 Регистрация: 7.1.2006 Из: Красноярск Пользователь №: 1 |
надо более детальное описание
но основное на что надо смотреть - на сколько корректно эмулируются регистры внешних устройств - тут есть отличия от БК-0010 -------------------- Живы будем - Не помрем !
|
| kazamul |
7.2.2026, 7:43
Сообщение
#4
|
|
Новичок ![]() Группа: Участники Сообщений: 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 |
7.2.2026, 7:44
Сообщение
#5
|
|
Новичок ![]() Группа: Участники Сообщений: 9 Регистрация: 22.6.2016 Пользователь №: 34 773 |
надо более детальное описание но основное на что надо смотреть - на сколько корректно эмулируются регистры внешних устройств - тут есть отличия от БК-0010 Вероятное предназначение 041714 и 040454 1. Адрес 041714 (Очередь задач / Буфер клавиатуры) В трассировке мы видим: Код MOV #041714, R5 TST (R5)+ ; Проверка: не ноль ли там? Это классическая проверка кольцевого буфера ввода или очереди сообщений.
2. Адрес 040454 (Системные флаги / Статус) Код проверяет конкретный бит: Код BIT #040000, 040454; Бит 14 (восьмеричное 040000 = бинарное 0100 0000 0000 0000) Это Слово Состояния Системы (System Status Word). В БК-0011М системные переменные часто лежат в области 04xxxx, когда подключена системная страница. Кто туда пишет? Сюда пишут асинхронные события (прерывания), которые происходят «за кадром»:
|
| kazamul |
8.2.2026, 7:27
Сообщение
#6
|
|
Новичок ![]() Группа: Участники Сообщений: 9 Регистрация: 22.6.2016 Пользователь №: 34 773 |
могу подтвердить что 041714 это кольцевой буффер клавиатуры - но кто и что может писать по адресу 040454 - не могу понять
|
| kazamul |
9.2.2026, 10:02
Сообщение
#7
|
|
Новичок ![]() Группа: Участники Сообщений: 9 Регистрация: 22.6.2016 Пользователь №: 34 773 |
у меня есть подозрение что я не правильно делаю сборку ROM
есть где-нибудь конкретная документация что где должно располагаться в зависимости от конфигурации БК-0011М например ничего не подключено 140000 - БОС + EXT 160000 - ???? где должен располагаться бейсик? там есть 3 файла по 8кб 100000 - basic1 + ???? 100000 - basic2 + basic3 подключен дисковод FDD 140000 - BOS + EXT 160000 - FDD и т/д/ вообще ничего не могу найти |
| SuperMax |
9.2.2026, 10:22
Сообщение
#8
|
![]() Администратор ![]() ![]() ![]() ![]() ![]() Группа: Root Admin Сообщений: 6 365 Регистрация: 7.1.2006 Из: Красноярск Пользователь №: 1 |
у меня есть подозрение что я не правильно делаю сборку ROM есть где-нибудь конкретная документация что где должно располагаться в зависимости от конфигурации БК-0011М например ничего не подключено 140000 - БОС + EXT 160000 - ???? где должен располагаться бейсик? там есть 3 файла по 8кб 100000 - basic1 + ???? 100000 - basic2 + basic3 подключен дисковод FDD 140000 - BOS + EXT 160000 - FDD и т/д/ вообще ничего не могу найти вот к примеру документация https://forum.maxiol.com/index.php?showtopic=5068 на 160000 всегда ПЗУ FDD (за исключением AZБК, там динамическое управление ПЗУ) -------------------- Живы будем - Не помрем !
|
| kazamul |
11.2.2026, 7:33
Сообщение
#9
|
|
Новичок ![]() Группа: Участники Сообщений: 9 Регистрация: 22.6.2016 Пользователь №: 34 773 |
спасибо
ссылка на 11 а не на 11М |
| SuperMax |
11.2.2026, 15:04
Сообщение
#10
|
![]() Администратор ![]() ![]() ![]() ![]() ![]() Группа: Root Admin Сообщений: 6 365 Регистрация: 7.1.2006 Из: Красноярск Пользователь №: 1 |
спасибо ссылка на 11 а не на 11М 11М в той же теме, смотрите внимательно -------------------- Живы будем - Не помрем !
|
![]() ![]() |
| Текстовая версия | Сейчас: 14.2.2026, 13:28 |