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 - обращайтесь в личку или сюда, в тему.