Просмотр полной версии : Эмулятор БК-0011М на ESP8266
konst_st
08.02.2019, 18:08
Всем доброго времени суток!
Оптимизировал я свой эмулятор БК-0010 (https://zx-pk.ru/threads/29542-emulyator-bk-0010-na-esp8266.html).
Получилось таки впихнуть БК-0011М в ESP8266.
Проект на github: https://github.com/konst-st/BK8266/tree/BK0011M
Билд 55:
https://github.com/konst-st/BK8266/blob/BK0011M/builds/55/0x00000.bin
https://github.com/konst-st/BK8266/blob/BK0011M/builds/55/fota.bin
Эмулятор использует все 160 кБ ОЗУ ESP8266 (из которых 128 кБ выделено под ОЗУ БК0011М).
ПЗУ БК11М подгружаются из флэш (используется программное кэширование).
Код эмулятора частично разбит на оверлеи, подгружаемые из флэш по мере необходимости.
Пока не реализовано:
Прерывание по вектору 14 после выполнения каждой команды при установленном в PSW бите T (трассировка).
Прерывание от таймера 50 Гц.
Чтение и запись файлов (планирую эмулировать дисковод).
Так же планирую реализовать эмуляцию звукового сопроцессора AY-3-8910.
Кстати, судя по всему эмулятор ZX Spectrum 128 тоже вполне реально на ESP8266 реализовать.
SoftLight
08.02.2019, 18:32
Кстати, судя по всему эмулятор ZX Spectrum 128 тоже вполне реально на ESP8266 реализовать.
Да и ZX Spectrum 48 уже было бы круто!
Спасибо за букашечку, буду пробовать.
konst_st
08.02.2019, 19:31
Думаю как эмулировать дисковые операции.
Если не реализовывать эмуляцию стандартного контроллера НГМД со всеми его регистрами и т.п., а сделать нестандартный контроллер, реализовав только стандартные вызовы:
160000 Автоматическая загрузка
160002 Загрузка с выбранного привода
160004 Чтение-запись по номеру блока
160006 Чтение-запись по номеру сектора
160010 Инициализация рабочей области драйвера
160012 Форматирование дорожки
Чем это грозит?
Не будет работать софт, который лезет к регистрам контроллера напрямую. Но такого софта, по идее, очень мало.
В модулях на ESP8266 устанавливают флэш от 1 до 4 МБайт. 512 кБайт отводится под прошивку. Итого остается от 0.5 до 3.5 МБайт под файлловую систему. Есть несколько вариантов эмуляции диска:
1. Загружать образы дискет по WiFi в файловую систему с подключением этих образов в эмуляторе.
2. Сразу сделать во флэш от одного 40-дорожечного до четырех (A B C D) 80-дорожечных дисков БК (в зависимости от размера флэш) с загрузкой в эти диски файлов по WiFi.
3. Сразу сделать во флэш один диск БК нестандартного размера (от 0.5 до 3 МБайт, нестандартное число дорожек или секторов на дорожке) с загрузкой в этот диск файлов по WiFi.
С третьим вариантом интересно как поведет себя софт БК в такой ситуации?
Класс, желаю проекту успеха!
Таймер на 50 Гц было бы круто, конечно.
Кстати, мы тут подумали, что если частоту процессора чуть-чуть повысить - ровно настолько, чтобы кадровая частота 48,83125 Гц сравнялась с 50 Гц - всё станет намного проще, а разницы никто не заметит.
konst_st
12.02.2019, 20:27
Таймер сделаю.
Сейчас думаю как файловую систему делать. Надо же равномерно распределять нагрузку на секторы флэш. Иначе тот же Andos будет убивать флэш записью FAT в одно и то же место.
По поводу 50 Гц. На сколько я понимаю это прерывание формируется в момент кадрового синхроимпульса? Или я ошибаюсь?
Если так, то я жестко привязан к строчной частоте. Если только менять число строк в кадре. Но, думаю, все равно будут получаться неточные значения. Сейчас у меня получается 49.689 Гц.
Впрочем я тоже думал подгонять частоту процессора под ту кадровую частоту которая у меня получается.
А в чем проблема что 50 Гц не совсем 50 Гц?
По поводу 50 Гц. На сколько я понимаю это прерывание формируется в момент кадрового синхроимпульса?Именно так. Оригинальная БК-0011 генерит кадровый импульс с частотой 48,83125 Гц (когда луч достигает низа экрана). Не очень хорошая частота.
Впрочем я тоже думал подгонять частоту процессора под ту кадровую частоту которая у меня получается.
А в чем проблема что 50 Гц не совсем 50 Гц?Если близко к 50 Гц, то проблем нет. А если меньше 49 Гц, то большинство телевизоров отказывается ловить такой импульс.
На оригинальном железе отрисовка одной строки экрана происходит ровно за 256 тактов процессора. Соответственно, если мы хотим чуть ускорить эмулятор, чтобы кадровая частота составила ровно 50 Гц, нам придётся пропорционально ускорить и сам процессор. Иначе будет расхождение и некоторые графические программы станут некорректно работать.
konst_st
17.02.2019, 19:11
если мы хотим чуть ускорить эмулятор, чтобы кадровая частота составила ровно 50 Гц, нам придётся пропорционально ускорить и сам процессор.
Да, как я уже писал, это я подгоню.
Да, как я уже писал, это я подгоню.Привет, как проект? Что не допилено?
К нему бы корпус напечатать на 3D-принтере, стилизованный под БКшку :)
konst_st
29.11.2021, 21:18
Пока забросил.
Эмуляция БК11 работает нормально. Остановился на эмуляции дисковода.
В принципе самое простое - перехват точек входа в подпраграммы чтения / записи ПЗУ контроллера. Но возможно это не со всем ПО будет работать.
Плюс какую то другую файловую систему надо во флэш делать, что бы образы дисков можно было заливать и что бы на них можно было писать.
Ну и проблема что только ЧБ режим.
Пока забросил.
Эмуляция БК11 работает нормально. Остановился на эмуляции дисковода.
В принципе самое простое - перехват точек входа в подпраграммы чтения / записи ПЗУ контроллера. Но возможно это не со всем ПО будет работать.
Плюс какую то другую файловую систему надо во флэш делать, что бы образы дисков можно было заливать и что бы на них можно было писать.
Ну и проблема что только ЧБ режим.Можно пока просто перехватывать EMT 36 (а на БК 0011М EMT 115) и читать файл с FAT
Powered by vBulletin® Version 4.2.5 Copyright © 2026 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot