Прочитав статью Передача аналогового тв сигнала с помощью STM32 решил попробовать нарисовать телевизионный сигнал на дешевой китайской плате stm32f401ccu6 за $2.5 без дополнительного железа.
Когда-то давным -давно году так 1988 досталась мне собранная плата ZX spectrum 48 ,без корпуса и клавиатуры. Клавиатуру собрал на герконовых кнопках, а вот телевизор был только черно-белый. И тут прочитав вышеупомянутую статью, решил , а не собрать ли мне черно-белый спекки. Починил подобранный когда то на помойке ч/б телевизор с экраном ЭЛТ в 5 дюймов и почитав спецификации на PAL/NTSC, взял китайскую платку stm32f401ccu6 с 64КB RAM ,256 Flash 84MHz 32bit processor.
Генерация видео-сигнала
Specci нужно 256 пикселей по горизонтали. Добавим по 8 на рамку. Добавим обратный ход луча и синхро импульс получим около 400 точек на линию 64 мсек. Если берем первый таймер (TIM1) с частотой 84MHz то получим 13 отсчетов ШИМ на точку, то есть от нуля до двенадцати. Возьмем уровень черного 3, уровень белого 10 , а уровень синхроимпульса 1. И запускаем Circular double buffer DMA с высоким приоритетом и отрисовкой в прерывании.Четные и нечетные линии дублируются , то есть у нас реально есть 50 герц обновления экрана (выбран PAL). Скорость эмуляции спектрума задается другим таймером (TIM4), выводящим звук.
Что не получилось
Два синхронных канала ШИМ на видео, для большего числа уровней серого. Они разваливаются, даже если на одном таймере, при работе USB.
Реализация Спектрума 128. На платке есть место для флеша, так туда подходит и даже работает сериальный PSRAM (PSRAM64H 3.3V SOP8 64Mbit),но только в режиме 1Bit SPI из-за разводки на плате. Примерно вдвое медленней чем нужно для эмуляции.
Телевизор подключен напрямую, но это нарушение спецификации уровня сигнала (3.3 вместо 1 вольта). По хорошему нужен делитель и ФНЧ.
Видео получилось не очень, картинка реально лучше, но с тв сложно снимать:
Использовать дла работы наверное не стоит:
update
Поправил баг со звуком и включил забытую оптимизацию.
tormozedison
Круто, но почему всё игры да игры? Для ZX Spectrum и текстовые/графические редакторы, и электронные таблицы, и т.п. есть.
AllexIn
Потому что игры актуальны и сейчас, хотя бы из ностальгических чувств и для ознакомления.
А софт — устарел и никакой практической ценности не имеет.
В игры можно играть. С софтом нельзя делать ничего.
tormozedison
Формат plain text на всех платформах одинаков, кодировки легко преобразуются. Спектрумовская графика легко переводится в современные форматы, то же и с музыкой.
amarao
Так что мы закроем vscode/vim и будем печатать на душераздирающей клавиатуре спекки в редакторе, у которого даже replace — достижение, а слово 're' он может разве что напечатать.
(Фолдинг? Синтакисческая подсветка? ctags? линтеры?)
Sdima1357 Автор
На 5 инч телевизоре, с текстом сложно работать. Это можно сделать и на PC, на прототипе того же эмулятора. Есть и вторая причина. Игры более капризны к точности эмуляции временных характеристик процессора и его окружения. Ещё более капризны демки, но у меня просто не было под рукой. Можете для себя собрать, паяльник не нужен, только платка из Китая на Али, телевизор и юсб клавиатура. Даже компилировать не нужно, на гихабе есть скомпилированный хекс. И есть версия на stm32f411 с CP/M и экраном на электронной бумаге. Но медленная. Зато работает от солнца.
tormozedison
На пятидюймовом смартфоне в горизонтальном режиме очень удобно с текстом работать, хотя половину экрана занимает клавиатура. На пятидюймовом телевизоре — то же самое, только под текст отведён весь экран.
Sdima1357 Автор
На эл бумаге лучше, была бы она чуток побыстрее… На CP/M очень много программ.
drWhy
На пятидюймовом экране смартфона разрешение от 1440х720, у телевизора 720х576, у Синклера 256х192 — работать с текстом конечно можно, но при очень большом желании.
hw_store
на пятидюймовом смартфоне, вероятно, разрешение не менее 1920*1080,
поэтому там на экране можно разместить довольно много читабельного текста,
а на телевизоре, подключенном к спектруму (не помню — 40*25 у него, или сколько?) сильно много текста не поместится.
AndreyHenneberg
На 5-дюймовом смартфоне — не менее 840*480. Сейчас 1440*720 — это 5,5", по крайней мере, в самом частом современном варианте. А FullHD — это уже либо топовые модели, либо большие размеры экрана. Но 5" такое разрешение просто не имеет смысла, поэтому почти и не делают. Поэтому «на пятидюймовом» и «не менее» — это всё-таки от 840*480.
У ZX Spectrum разрешение было 32*24, что легко подсчитать, если вспомнить, что цвета задавались по знакоместам размером 8*8. Разного рода текстовые редакторы с собственными знакогенераторами и «ручным» выводом текста на экран, сокращая ширину символа до 6 точек, добивались 42 знакомест в строке. Кажется, попадались варианты с шириной знакоместа 5 точек, но это было уже что-то на грани читаемости текста, хотя и позволяло увеличить строку до 51 символа.
drauger
Помнится, у моего прошлого Nexus 5 разрешение 1920х1080 было на диагонали 4,96 дюйма. А вышел он в 2013 году.
AndreyHenneberg
Ну так Nexus же, а это как раз топовая железка, смысл которой именно в том, чтобы быть топовой, а значит, параметры часто задраны выше разумного. Так что это не может быть опровержением моего утверждения. Тем более, что речь шла о «не менее». Вот разрешение меньше, чем 480*840, ну или 480*800 — зависит от наличия аппаратных кнопок, на 5 дюймах не бывает. А больше можно ставить сколько технологии позволяют. Только вот есть ли смысл для обычного использования смартфона в качестве смартфона, а не в качестве ножа для приготовления сашими из понтов?
kasigor
Лихие 90-е. Как не удивительно, но в осенью 1994 года я через ZX Spectrum 48 с дисководом (киевского производства, Электроника какая-то там) впервые в жизни вышел в telnet. Интернет только зарождался. Использовал программу TERM.T91. Можно было найти различные BBS по всему миру. Там были шлюзы на емаил и разный софт, книги, фоточки. Адресов BBS я не знал и поэтому наугад набирал разные ip адреса. Однажды попал на какой-то узел. Оказалось какое-то учреждение в Индии (Калькута). Я вызвал сисопа. Я с ним пообщался хорошо. Человек скучал на работе))
Нигде не было авторизации. Везде welcome>_
На этих BBS были книги в cp 866 кодировке кажется. Спектрум их не мог отображать. Пришлось на бейсике писать конвертор текста. Отображение экрана занимало секунд 10 при перелистовании страницы. В 1994 году это было круто, учитывая то что знакомые по 20 лет стояли в очереди на подключение стационарного телефона. А тут общайся со всем миром.
ZX Spectrum был первый мой компьютер в жизни. У меня их было много разных потом. Но ничего подобного я не испытывал к другим компам. Это было чудо, amazing! Иногда аж хочется купить Спектрум. Хотя прекрасно понимаю, что прошлого не вернешь. И такого кайфа не получу уже. Как говорят американцы, что лучше быть первым, чем лучшим.
tormozedison
Во как — даже не звонком прямо на модем BBS своего города, что тогда чаще делали, а звонком провайдеру, а оттуда на разные IP? А как PPP на спектруме был реализован?
kasigor
Не было звонка провайдеру и не было PPP. И провайдеров еще не было тогда. Фидонет была помню и BBS у энтузиастов.
Соединение происходило по ax.25, скорость 1200 бод, контроллер пакетной связи TNC-2, который через RS-232 подключался к ZX Spectrum.
tormozedison
Но в вашем комментарии упомянуты IP-адреса, а не фидошные.
kasigor
Ax.25 это протокол в беспроводной связи, к фидонету отношения не имеет. Я написал это в общем плане, что имелось из сервисов которые подключались по телефону. Про ррр тогда я даже и не знал. Подключение происходило через радиостанции.
Я заходил на узел. Писал telnet xx.xx.xx.xx и коннектился. На узле операцонка Unix была.
tormozedison
Это была та самая пакетная радиосвязь, о которой тогда так много писали? Та радиостанция, с которой вы связывались, была подключена к чему-то вроде сервера, и там вы получали shell-аккаунт, а сервер, в свою очередь, был соединён с интернетом? И в теории, вместо telnet можно было бы набрать lynx, если бы он на сервере был? А он там мог быть, ибо существует с 1992 года.
kasigor
Вы правы. Это было Packet Radio.
P.s. у вас классные статьи на Хабре. Залип на них и подписался на вас