Когда-то давно, Юрий Калмыков
писал эмулятор БК-0010(01) под Windows. Но позже видимо забросил это дело
и выложил исходники всем желающим.
Здесь находятся доработанный и улучшенный эмулятор Юрия Калмыкова на
основе его исходников. Относительно оригинала добавлена эмуляция БК-0011,
БК-0011М, AY-8910, FDD контроллеры: стандартный, A16M, СМК-512, Самарский
контроллер HDD + эмуляция HDD.
Не забываем про необходимость
VC redistributable 2015/2017/2019/2022 разрядности, соответствующей
используемой разрядности программ. Не Windows. При запуске 32х разрядной
проги на 64х разрядной винде, нужен 32х разрядный VC_redist.exe.
Данный пакет для x86 не запускается в Windows XP, поэтому пользователям
Windows XP нужен вот такой
VC Redist 2015/2017/2019
и больше никакой.
Известные ошибки и проблемы:
Играть в игры для БК-0010 затруднительно из-за не синхронизированной
обработки клавиатуры и эмуляции выполнения инструкций процессора. Клавиатура
обрабатывается в реальном времени, а инструкции - пакетом, за как можно
короткое время, между ожиданиями обработки звуковой подсистемой Windows
звуковых буферов.
Режим построчной эмуляции экрана работает не полностью корректно,
в обычной работе это не заметно, а вот на некоторых демках, использующих
эффекты мультиколора и синхронизированного с ходом луча переключения
экранов даже очень заметно.
Как оказалось тайминги и их коррекция под разные частоты совершенно
неправильные. Нужно писать новый эмулятор, с принципиально иным алгоритмом
эмуляции.
Со звуком всё таки что-то неладно. Но не у всех и не всегда. Есть
люди, у которых звук эмулятора работает стабильно плохо.
Эмуляция мыши путём захвата ПКшной мыши работает ужасно. Поэтому
не вынесена в опции и включается/выключается или вручную в ini файле,
или в окне настроек.
Коррекция работы внутренних функций доступа к памяти, чтобы можно было редактировать содержимое ПЗУ в дампе памяти и окне дизассемблера. Полезно при всяких экспериментах. Изменения хранятся до перезапуска конфигурации.
Таймер в строке состояния превращён в таймер аптайма, когда эмулятор на паузе, таймер не работает. Ну и работает он с точностью ± секунда-другая, т.е. вообще не точный.
Фикс эмуляции джойстика, чтобы можно было назначать на клавиши со стрелками. И вообще на любые не занятые клавиши.
В дампере памяти не бин файл теперь загружается по адресу по умолчанию 1000.
В дампере памяти наведён человеческий порядок, чтобы было удобнее пользоваться сохранением/загрузкой дампов памяти.
Продолжение улучшения контроля над командой шаг с обходом, ловим разные редкие ситуации.
Коррекция поведения при сохранении состояния, когда эмулятор находится в отладочном останове.
Исправлена опечатка в рендере Direct3D, из-за которой цвета были темнее, чем надо.
Исправлена эмуляция клавиатуры, когда происходило незапланированное прерывание, при разрешении прерываний от клавиатуры.
Исправление ошибки в эмуляции ввода-вывода на дисковод и магнитофон, когда не происходило прерывание по вектору 4 при ошибках в результате эмуляции.
BKBin2Obj
Исправлена ошибка, метка генерировалась регистрозависимая, а должна быть регистронезависимая.
BKTurbo8
В объектном файле таблицы меток определения теперь вычисляются, если могут.
Расширение функционала скриптов - добавлены новые команды - для работы с файлами и для вывода своего текста.
Фикс косяка в парсере арифметических выражений, иногда не обрабатывались скобки.
Добавлена конфигурация сборки под платформы ARM (экспериментально, мне проверять не на чем, а те, кто просил и пробовал - говорят - работает).
Исправлены функции внутреннего доступа к памяти, которыми пользуются окна дампа памяти и дизассемблера.
Ещё раз откорректирована эмуляция Менестреля.
P.S. В BKTurbo8 теперь после аргументов команд .asciz, .ascii, .rad50 можно писать другие команды, раньше это считалось ошибкой.
P.P.S. Поскольку мне не понравилось, как сжимает винрар 7, то было решено перейти на 7z, оно оказалось существенно лучше, так что откатываться к винрару 6, смысла нету.
В настройках добавлена кнопка для создания образа пустой дискеты
Исправлена опечатка в BKKbdButn.cpp из-за которой глючили некоторые символы пунктуации
Кнопка СТОП переназначена на F12, если не работает, надо сбросить в настройках: клик правой кнопкой на меню или тулбаре, выбрать пункт "Настройка...", во вкладке "Клавиатура" кнопка "Сбросить все"
Добавлена эмуляция JCUKEN раскладки, выбирается в опциях.
Уточнение диспетчера прерываний. IRQ1 по клавише СТОП теперь работает корректно. И блокировка клавиши СТОП командами SUB (PC),(SP) RTI теперь работает.
Исправление бага в работе ВЕ-таймера после добавления эмуляции К1801ВМ1Г в прошлом релизе.
Экспериментальные изменения со сбросом бита готовности в 177660, он теперь сбрасывается через некоторое время после чтения регистра 177662. Возможно это совсем неправильная фича и её надо будет убрать потом.
Найдена и исправлена ошибка, когда размер экрана при запуске внезапно сбрасывался на значения по умолчанию 1024х768.
Исправлена неправильно работавшая функция DC Offset для спикера.
Исправлена ошибка - не сохранялось переназначение битов джойстика.
Изменения в HDDImgMaker:
Добавлена опция ограничения размера образа, если геометрия не совпадает с фактическим размером. И заодно и возможность коррекции геометрии до фактического размера - на выбор, желающим того или этого.
Добавлены визуальные улучшения от Scalolaza - цвет прогрессбара при нормальной работе - зелёный и красный при ошибках.
Изменения в BKTurbo8:
Исправлена ошибка, когда включались ранее включённые инклуды, которые могли быть включены в других инклудах.
Изменения в BKHDDTool:
Добавлен парсер образов, улучшена работа с размерами разделов, исправлена неправильная работа с разделами меньше 800К (размера дискеты).
Изменения в BKDE/BKDL:
Добавлена поддержка образов экзотических ОС. Только по чтению, т.к. никакого физического смысла в них нету. И всего существует только по паре сохранившихся образов дискет с этими ОС, на которых всё равно не было ничего интересного.
Добавлены новые опции эмуляции. Они редактируются только вручную из ини файла bk.ini, чтобы кому не надо не злоупотребляли. Находятся в секции [Main].
Emulate C Bug - опция эмуляции бага флага признаков C. Описание где-то было, когда найду, опишу в документации. По умолчанию включена.
Emulate 177702 behavior - опция эмуляции верного поведения регистра 177702. Это когда в него что-нибудь запишешь, и он пропадает с шины. По умолчанию включена. Рекомендуется выключить, для того, чтобы программно определять эмулятор/реальное железо. Если выключена, то при записи в регистр, он с шины не пропадает, но из него читается всегда число 177777.
Emulate CPU 1801VM1G - опция включает особенности процессора К1801ВМ1Г: аппаратную команду MUL и прерывание от ВЕ-таймера. По умолчанию выключена.
Emulate EIS Instructions Set - опция включает аппаратное выполнение инструкций MUL, DIV, ASH, ASHC. По умолчанию выключена.
Emulate FIS Instructions Set - опция включает аппаратное выполнение инструкций FADD, FSUB, FMUL, FDIV. По умолчанию выключена.
Последние три опции - исключительно для экспериментов. Потому что, включение их может поломать кучу софта, который использует опкоды этих инструкций в своих целях. Например, Andos 3.1. не работает на процессоре К1801ВМ1Г т.к. использует опкоды инструкции MUL для своих системных вызовов.
Правка бага, который нашёл KUVO - глюки отладки при нечётном PC.
Добавлена опция для задания разного вида формата имени файла скриншота.
По просьбе Gryphona распространяем опцию "Останов CPU после запуска эмулятора" на загрузку состояния. Теперь, если включить эту опцию и сохранить с ней состояние, то оно при загрузке выведет эмулятор в отладочный останов, и его надо будет запускать руками.
Сэмулировано поведение регистра 177702, теперь, если в него что-нибудь записать, он исчезает, пока не будет выполнена команда EMT или перезагрузка.
Возня с пользовательским интерфейсом:
Добавлено немного иконок;
Добавлена на тулбар кнопка, чтобы делать прерывание по вектору 100 или 270;
Разделено слишком большое меню "Конфигурация" на два: "Конфигурация" и "Управление";
В окне "О программе" обычный текст заменён htmlкой для красоты.
Обновлена документация по формату MSF до актуальной версии.