Flash Floppy OSD доступен для MSX!

By Wierzbowsky

Guardian (3527)

Wierzbowsky's picture

04-09-2022, 21:28

FlashFloppy - известная прошивка для эмулятора дисковода "Готек" от Кейра Фрейзера. Прошивка поддерживает как оригинальный экранчик Готека с тремя индикаторами, так и OLED экранчики разных типов. Но мало кто в MSX тусовке (включая меня) знал, что существует ещё и дополнение к этой прошивке в виде FlashFloppy OSD (On-Screen Display). Эта прошивка загружается в микроконтроллер STM32 на плате Blue Pill, плата подключается к Готеку и к двум видеосигналам компьютера (один из цветовых сигналов и синхросигнал) и в результате копия экрана Готека "вставляется" в видеосигнал компьютера. Это очень удобно, когда у Готека нет экрана, а также если экран находится вне зоны видимости.

Я впервые столкнулся с проблемой "слепого" переключения образов диска на Готеке половинной высоты (aka "slim"), когда работал над проектом DualSlim. Из-за малой высоты Готека вставить в него даже самый миниатюрный экранчик весьма сложно. Да и неудобно было бы его использовать, так как он оказался бы сбоку, да ещё под нависающим корпусом. Я начал искать способ решить эту проблему и нашёл проект FlashFloppy OSD, который существует уже несколько лет и который был успешно применён на нескольких винтажных компьютерах. Но, как оказалось, для MSX этот проект никогда не был адаптирован. Посмотрев видео и документацию, я решил стать первопроходцем.

Как и всем первопроходцам, почти сразу же мне удалось наступить на "грабли". Оказалось, что почти все Blue Pill платы содержат не оригинальные чипы STM32, а их китайские клоны. И эти клоны не могут нормально работать с последней прошивкой FF OSD v1.9. Обе платы, купленные у немецкого дистрибутора отказались проходить Blinker тест - I2C функционал не работал, также тест выдавал подозрение на "фейк". Тогда в Китае были заказаны ещё 4 платы Blue Pill. Одна из них опять была признана тестом как фейк, остальные же не проходили тест по причине отказа флешки (скорее всего размер флешки был неправильным). Но они хотя бы проходили тест I2C. В итоге, потратив почти 50 Евро, я получил не вполне подходящие платы. Но эти 3 китайские платы всё же удалось запустить, прошив в них FF OSD v1.9. Платы на базе STM32F103C8T6 чипа были куплены здесь:

https://www.aliexpress.com/item/1005003169244854.html
https://www.aliexpress.com/item/1005003039643348.html
https://www.aliexpress.com/item/1005003038641885.html

В процессе адаптации мой Готек был немного модифицирован - была припаяна "гребёнка" на разъём питания и I2C, а также залита последняя версия прошивки FlashFloppy. Потом начались тесты с прошитой Blue Pill на арабской AX-350 (превращённой в почти YIS805 с переключением прошивок) - аналога нашей КУВТ2 YIS503III, только без дисковода. Также нужно было модифицировать плату Blue Pill. К ней были припаяны 6 проводов, уменьшена высота джамперов конфигурации (чтобы поместилась в slim корпус), а также напаяны резисторы на 4.7кОм для подтяжки SDA и SCL к питанию 3.3в. Вот так это выглядит:

Джампер между A0 и A1 был запаян, но потом убран, так как он включает увеличение размера имени выбранного образа диска. Лучше делать этот джампер съёмным, но я не был уверен, что с этим джампером не возникнут проблемы при установке платы в слим Готек. Затем плату надо было сконфигурировать - подключить её к компьютеру через UART, запустить Putty, выбрать порт для связи и записать дефолтные настройки во флеш память. Затем я немного поменял координаты вывода окна OSD, чтобы оно было расположено в верхнем левом углу экрана. Настройки можно менять управляя платой из терминального окна. Пробел, введённый в терминальном окне выбирает опцию, P или O выбирают значение опции. Правильная конфигурация выглядит так:

Первого результата (после неоднократных неудач, нескольких десятков проб и ошибок) удалось добиться через несколько дней - на экране появился наконец-то вожделенный OSD! Синхросигнал пришлось подключать с видеомодуля (он там TTL уровня, другой плата видеть не хотела), туда же был "подцеплен" цветовой сигнал для вывода OSD. Но OSD оказался с кучей цветовых артефактов по краям, а также с увеличенной высотой. Совместно с автором прошивки мы попытались решить проблему и в итоге, после некоторых модификаций, удалось вывести OSD на экран без артефактов и в желаемом компактном виде. В данном случае мы убрали джампер A0-A1 на Blue Pill и подобрали сопротивление на цветовой канал в 330 Ом. Самым удачным был тест на зелёном канале RGB, так как остальные давали не очень хорошую цветовую совместимость. Вот тест совместимости по цветам:

Потом оказалось, что компьютер теряет синхросигнал и цветность в режиме "арабка" 50гц. Тогда было добавлено и подобрано сопротивление на линию синхросигнала - 220 Ом. После этого всё заработало как надо. Чтобы OSD выключался после некоторой задержки и не торчал на экране всё время, необходимо в файле FF.CFG в корне USB флешки прописать таймаут "display-off-secs = N", где N - количество секунд до выключения OSD, от 5 до 10 - в самый раз! Вот так выглядит расположение и подключение платы Blue Pill c FF OSD прошивкой внутри корпуса слим Готека. Плату я закрепил внутри не очень толстым двусторонним скотчем:

Внутри надо подключить питание 3.3в и "землю" к самой плате Готека, а также подключить SDA и SCL сигналы. Если смотреть со стороны разъёма слим Готека, то выходы I2C интерфейса выглядят так: [SDA] [SCL] [GND] [3.3v]. Вот подробное видео о том, как прошивать Blue Pill и как подключить её к плате полноразмерного Готека, обязательно его посмотрите перед установкой платы в свой Готек:

https://www.youtube.com/watch?v=9noYsB_QJkQ

Наружу из Готека надо вывести всего 2 провода - один для вывода OSD в цветовой сигнал, а второй для ввода синхросигнала на плату Blue Pill. Проще всего оказалось подключить эти провода прямо ко входу видеомодуля, припаяв "гребёнку" снизу к его разъёму (только для AX-350 или YIS503III):

Для вывода проводов из Готека, надо в его верхней крышке прорезать небольшое углубление:

Я установил переменные сопротивления, чтобы можно было подобрать нужные значения, но вы можете сразу ставить 330 Ом на цветовой сигнал и 220 Ом на синхросигнал. Вот так это выглядит у меня:

В итоге, всё получилось и теперь OSD виден во всех режимах: в ДОСе, Бейсике и в играх. Вот несколько скриншотов:

Работу по подключению и наладке FF OSD можно посмотреть в этим тикете для автора прошивки: https://github.com/keirf/flashfloppy-osd/issues/48

Но это ещё было не всё... :)

Перфекционизм иногда является проклятьем, но часто позволяет добиваться лучших результатов. Подключение OSD к зелёному каналу сработало на "отлично", но как видно на картинке совместимости цветов (см. выше), в некоторых цветовых комбинациях OSD виден не очень хорошо. Идеальным бы было подключить OSD по всем трём цветовым каналам, да ещё с возможностью регулировки на каждом из них.

После общения с автором прошивки, идея поставить диоды на цветовые каналы была отвергнута, так как OSD выводится периодическим подтягиванием цветового сигнала либо к питанию, либо к "земле". По рекомендации автора, было решено использовать Hex 3-STATE Buffer микросхему 74LS367. Это потребовало не только вывода дополнительного провода из Готека, но и изменения конфигурации прошивки FF OSD. Но, обо всём по порядку.

Для начала, надо изменить конфигурацию таким образом, чтобы активировать выход A15 платы Blue Pill для управления микросхемой буфера. В опции "Display Enable" надо выбрать значение "PA15 Act.LOW". Лучше всего это сделать в самом начале работы с платой, если вы твёрдо решили подключить её ко всем трём цветовым каналам. Правильная конфигурация выглядит так:

Затем надо припаять провод к пину A15 платы Blue Pill и вывести его наружу, как показано здесь:

Затем необходимо припаять "гребёнку" подлиннее, чем описано выше на разъём видеомодуля (только для AX-350 или YIS503III), как показано здесь:

Теперь необходимо собрать простейшую схему с одной микросхемой (74LS367 или 74HC367), четырьмя переменными резисторами (три по 2кОм, один на 1кОм для синхросигнала, но можно и четыре по 2кОм) и одним керамическим конденсатором (100нФ). Я собрал эту схему на огрызке макетки за полчаса и подключил её к припаянной гребёнке. Выведенные из Готека провода я подключил к плате трёхпиновым разъёмом:

Сама схема выглядит следующим образом:

Установленная в AX-350 плата выглядит так:

Следует обратить внимание, что на выходах цветовых каналов необходимо бОльшее сопротивление, нежели чем для подключения одного канала, описанного выше. Сопротивление на линии ввода синхросигнала остаётся прежним - 220 Ом. Поиграв со значениями сопротивлений, удалось получить весьма хорошие результаты. Если сопротивление находится в районе 700-800 Ом, то чёрная рамка OSD почти перекрывает собой изображение под ней, а текст просвечивает, как видно здесь:

Если же поднять сопротивление до 900 Ом или выше, то рамка становится полупрозрачной, как видно здесь:

Если же текст оказался на чёрном фоне, то рамка становится не видна, зато текст выводится серым цветом:

В общем, пусть каждый сам выбирает уровень прозрачности OSD рамки. Главное - не выставлять сопротивление цветовых линих ниже 700 Ом. Для облегчения установки FF OSD я сделал платку, которую можно будет использовать не только в компьютерах AX-350 и YIS503III, но и в других MSX машинках. Платка будет выложена в репозиторий группы RBSC после того, как я проверю её в деле. Вот как она будет выглядеть (размер её всего 3х3см):

Эту платку можно будет также использовать для подключения одного цветового канала, без установки микросхемы. В этом случае на нужный канал ставится переменный резистор и соответствующие этому каналу места пайки ножек микросхемы соединяются джампером. Например, для зелёного канала ставится только R2 и замыкаются посадочные места под ножки 4 и 5 (ножки 2 и 3 для красного канала, ножки 6 и 7 для голубого канала). Переменный резистор R4 ставится всегда. В этом случае к плате на разъём CN2 подключаются только провода от B15 (средний пин CN2) и от A8 (правый пин CN2) платы Blue Pill.

Если у кого-то будут вопросы по поводу установки и конфигурирования FF OSD - обращайтесь в личку или сюда, в тему.

Login or register to post comments

By Wierzbowsky

Guardian (3527)

Wierzbowsky's picture

03-10-2022, 19:09

Пришли фабричные платки. Собрал и проверил - всё норм. Скоро опубликую герберы.

By Wierzbowsky

Guardian (3527)

Wierzbowsky's picture

22-10-2022, 18:32

Наконец-то можно объявить об успешном завершении проекта! В официальной прошивке FlashFloppy v3.36 теперь можно управлять размером OSD и выводимой информацией. Большое спасибо автору Keir Fraser за проделанную работу!

В предыдущем посте была информация о перемычке между выводами A0 и A1 на плате Blue Pill. Эта перемычка необходима, так что ставим её на плате. Теперь можно управлять настройками FF OSD используя кнопки на корпусе Готека. Нажатие двух кнопок одновременно выбирает опцию или является подтверждением действия, например записи конфигурации. Нажатие кнопок по отдельности служит для пролистывания списка опций вверх или вниз, а также для изменения значения выбранной опции, например значения сдвига OSD относительно верхнего левого угла экрана.

Чтобы сконфигурировать FF OSD с помощью Готека, необходимо сначала вынуть USB накопитель и включить компьютер. На экране появится информация о прошивке. Нажатием двух кнопок заходим в главное меню, выбираем опцию конфигурирования FF OSD и подтверждаем наш выбор. Дальше заходим в конфигурацию FF OSD и выбираем следующие значения:

Sync Polarity: Low
Pixel Timing: 15kHz
Display Height: Normal
Display Output: PB15/SPI2
Display Enable: PA15 Act.LOW

Последняя опция обязательна, если вы подключили все три цветовые линии с помощью платки FF OSD 3CH BOARD. Теперь надо выбрать местоположение OSD на экране. Лучше всего разместить его в верхнем правом углу экрана. Значения конфигурации будут выглядеть так:

H.Off (1-199): 145
V.Off (2-299): 35

Затем подтверждаем запись значений на флешку Blue Pill и когда появляется сообщение о power-off, выключаем компьютер. После включения компьютера новые значения конфигурации будут в силе и FF OSD будет работать в выбранном вами режиме. Вот как выглядят опции для конфигурирования на экране:

Таперь осталось правильно сконфигурировать Готек с помощью файла FF.CFG. Этот файл конфигурации поставляется с каждой новой прошивкой и в нем можно найти новые переменные, которые поддерживает свежая прошивка. Для конфигурирования Готека с FF OSD рекомендуются следующие значения:

host = msx
display-type = auto
oled-font = 6x13
display-order = default
osd-display-order = 0,1
osd-columns = 16
display-off-secs = 5

Последнюю опцию надо настроить так, чтобы OSD исчезал через короткое время (5 секунд) и не мешал играть или работать. Файл для конфигурации для прошивки Готека FlashFloppy v3.36 и выше можно скачать здесь:

https://podrezov.com/ffosd/FF.CFG

Записываем этот файл в корневую папку USB накопителя, вставляем его в Готек и включаем компьютер. Теперь у вас есть возможность видеть экран Готека прямо на своём мониторе, а также перемещать OSD по экрану в любое удобное для вас место. Вот как это должно выглядеть в идеале:

Герберы платы FF OSD 3CH BOARD можно скачать отсюда (коммерческое использование не разрешено!):

https://podrezov.com/ffosd/FFOSD_Board_Gerber_10.zip

Так как не все платы Blue Pill подходят для этого проекта, то рекомендуем проверить вашу плату перед установкой в Готек. Проверка плат Blue Pill на работоспособность с Готеком можно прошивкой Blinky. В самой последней прошивке автор немного напутал с битрейтом, так что рекомендуем использовать более раннюю прошивку (скорость интерфейса - 115200 бод):

https://podrezov.com/ffosd/Blinky_Test-v0.20.hex

Тест Blinky может не всегда закончиться успешно на вашей плате (на ошибку флешки можно не обращать внимание), но главное, чтобы прошёл тест интерфейса I2C:

Если вам понравился этот проект, закиньте немного денежек автору прошивки FlashFloppy и FF OSD в знак благодарности за его труд и терпение.