Timeweb.Cloud

Timeweb.Cloud

Облачная инфраструктура для бизнеса Наш сайт: https://timeweb.cloud/ ТГ: https://t.me/timewebru Хабр: https://habr.com/ru/companies/timeweb/articles/
На Пикабу
поставил 153 плюса и 5 минусов
отредактировал 3 поста
проголосовал за 3 редактирования
Награды:
более 1000 подписчиков5 лет на Пикабу
70К рейтинг 1045 подписчиков 18 подписок 287 постов 246 в горячем

Оживляем электронный кран машиниста от электровоза

Автор: MaFrance351

Приветствую всех!
Если вы хотя бы раз видели кабину локомотива или электрички, то наверняка знаете, что для управления тормозами там используется кран машиниста — достаточно сложный пневматический прибор, призванный изменять давление в тормозной магистрали. В новых поездах эти устройства перестали быть чисто пневматическими, в них появилась ещё и электроника.
Мне всегда хотелось раздобыть такой экземпляр и показать, как он устроен. И вот наконец мне удалось это сделать, так что самое время вернуть его к жизни и узнать, на что он ещё способен.

Оживляем электронный кран машиниста от электровоза Электроника, Техника, Timeweb, Электровоз, Сборка, Инженер, Поезд, Telegram (ссылка), Длиннопост

Итак, в сегодняшней статье поговорим про такой артефакт наших железных дорог как кран машиниста №130. Узнаем, как устроен его контроллер и попробуем его восстановить. Традиционно будет много интересного.

❯ Суть такова

Оживляем электронный кран машиниста от электровоза Электроника, Техника, Timeweb, Электровоз, Сборка, Инженер, Поезд, Telegram (ссылка), Длиннопост

Так получилось, что основными приборами управления тормозами на нашем подвижном составе являются краны машиниста №394 и №395. В плане пневматики это по сути один и тот же кран, единственное отличие заключается в наличии у триста девяносто пятого контроллера управления электропневматическим тормозом (та самая круглая коробочка сверху). Также на фото виден маленький кран вспомогательного тормоза №254, служащий для управления тормозами локомотива.

Оживляем электронный кран машиниста от электровоза Электроника, Техника, Timeweb, Электровоз, Сборка, Инженер, Поезд, Telegram (ссылка), Длиннопост

Само собой, этими двумя моделями список не ограничивается. Вот, например, кран №334, применяющийся на вагонах метро (а ещё раньше — на локомотивах и МВПС). Модель очень старая, по найденным сведениям, выпускался он аж с 1904 года и ставился ещё на паровозы.

Оживляем электронный кран машиниста от электровоза Электроника, Техника, Timeweb, Электровоз, Сборка, Инженер, Поезд, Telegram (ссылка), Длиннопост

Кран №013, устанавливающийся на практически все новые вагоны метро, а также рельсовые автобусы РА1.

Оживляем электронный кран машиниста от электровоза Электроника, Техника, Timeweb, Электровоз, Сборка, Инженер, Поезд, Telegram (ссылка), Длиннопост

А вот довольно экзотический кран №172 (он же 4ВК), применяющийся в частности на трамваях с пневмотормозом (ЛМ-68М, ЛВС-86К, РВЗ-6М2...).

❯ Что же это за кран №130?

Предмет сегодняшнего обзора — так называемый кран с дистанционным управлением. В отличие от предыдущих экземпляров, этот — электронный, состоящий из контроллера крана машиниста в кабине и пневмопанели в аппаратном отсеке. По части положений это всё тот же кран №395. Вообще, про то, как работают краны №394 и №395, отлично рассказывал maisvendoo в своём посте про приборы управления, так что не вижу особого смысла повторяться тут.

Оживляем электронный кран машиниста от электровоза Электроника, Техника, Timeweb, Электровоз, Сборка, Инженер, Поезд, Telegram (ссылка), Длиннопост

Эти устройства ставятся на новый подвижной состав. Вот, например, этот кран в кабине электрички ЭП2Д (его ручка видна в правой части пульта, слева контроллер машиниста).

Оживляем электронный кран машиниста от электровоза Электроника, Техника, Timeweb, Электровоз, Сборка, Инженер, Поезд, Telegram (ссылка), Длиннопост

А вот он же в электровозе ЭП20.
По сравнению с более старыми кранами непосредственного действия, разработанными полвека назад, этот — совсем новый, его внедрение началось лишь в нулевые годы.

Оживляем электронный кран машиниста от электровоза Электроника, Техника, Timeweb, Электровоз, Сборка, Инженер, Поезд, Telegram (ссылка), Длиннопост

Но всё же электроника иногда отказывает (и отказывает внезапно), поэтому в паре с электронными кранами всегда ставятся и обычные, непосредственного управления, расположенные либо под крышкой, как тут, либо сбоку пульта (как в новых поездах метро). Было немало обсуждений надёжности этого крана (или её отсутствия), в сравнении с чисто пневматическими кранами она была много меньше.

❯ Обзор оборудования

Оживляем электронный кран машиниста от электровоза Электроника, Техника, Timeweb, Электровоз, Сборка, Инженер, Поезд, Telegram (ссылка), Длиннопост

А вот и мой экземпляр. Он был снят с какого-то электровоза по причине его выхода из строя. Впрочем, внешнее его состояние очень неплохое, что не может не радовать.

Оживляем электронный кран машиниста от электровоза Электроника, Техника, Timeweb, Электровоз, Сборка, Инженер, Поезд, Telegram (ссылка), Длиннопост

Шкала с положениями. Они здесь всё те же, что и в кране №395. Ручка приятно тугая, переключается с характерным щелчком.

Оживляем электронный кран машиниста от электровоза Электроника, Техника, Timeweb, Электровоз, Сборка, Инженер, Поезд, Telegram (ссылка), Длиннопост

Заводская табличка. Делает эти устройства АО МТЗ-Трансмаш. На табличке почему-то не заполнено ни одно из полей.

Оживляем электронный кран машиниста от электровоза Электроника, Техника, Timeweb, Электровоз, Сборка, Инженер, Поезд, Telegram (ссылка), Длиннопост

Снизу ничего интересного, только крышка, в которую некогда был вставлен разъём.

❯ Внутренности


Давным-давно я писал про контроллер машиниста. Там код позиции задавался кулачками, нажимавшими на самые обычные микрики. Этот же контроллер — бесконтактный.

Оживляем электронный кран машиниста от электровоза Электроника, Техника, Timeweb, Электровоз, Сборка, Инженер, Поезд, Telegram (ссылка), Длиннопост

Заглянем внутрь. Самое печальное — плату до меня уже вытащили и до наших дней она не дожила. Так что для подключения этого девайса придётся собирать свою.

Оживляем электронный кран машиниста от электровоза Электроника, Техника, Timeweb, Электровоз, Сборка, Инженер, Поезд, Telegram (ссылка), Длиннопост

Самая главная часть контроллера — вот этот рычаг, на конце которого закреплён магнит. Соответственно, на плате находятся датчики Холла, считывавшие его положение.

Оживляем электронный кран машиниста от электровоза Электроника, Техника, Timeweb, Электровоз, Сборка, Инженер, Поезд, Telegram (ссылка), Длиннопост

А вот механизм переключения остался тем же — металлический диск с вырезами и ролики. Крайние положения переключаются особым образом: в сверхзарядке кран не фиксируется, а в экстренное торможение переключается очень туго.

❯ Собираем плату управления


Штатная плата была выкинута, так что единственным вариантом подключить такой кран будет сборка своей собственной.

Оживляем электронный кран машиниста от электровоза Электроника, Техника, Timeweb, Электровоз, Сборка, Инженер, Поезд, Telegram (ссылка), Длиннопост

Дома завалялась целая куча вот таких вот побитых жизнью макетных плат, выпущенных в ныне несуществующей ГДР. Какие-то были совершенно пустыми, а какие-то всё ещё хранили наследие былой эпохи вроде раритетных радиодеталей или остатков монтажа навивкой. Как мне подсказали, это остатки от ЗИПа к какой-то модели Robotron, впрочем, состояние позволяло использовать эти платы исключительно как обычные макетки.

Оживляем электронный кран машиниста от электровоза Электроника, Техника, Timeweb, Электровоз, Сборка, Инженер, Поезд, Telegram (ссылка), Длиннопост

Для того, чтобы считывать позиции, были взяты датчики Холла. Это те самые SS495A, оставшиеся у меня после экспериментов с магнитными ключами домофонов «Факториал». Датчиков нужно семь штук — на каждую из позиций по одному.

Оживляем электронный кран машиниста от электровоза Электроника, Техника, Timeweb, Электровоз, Сборка, Инженер, Поезд, Telegram (ссылка), Длиннопост

Также использовал MAX485 для передачи данных (почему именно её — расскажу чуть позже) и видавшую виды Arduino на базе чипа от LGT для управления.

Оживляем электронный кран машиниста от электровоза Электроника, Техника, Timeweb, Электровоз, Сборка, Инженер, Поезд, Telegram (ссылка), Длиннопост

Для начала возьмём один датчик и убедимся, что он вообще подходит для этих целей. А подходит он идеально, мощного неодимового магнита контроллера хватает, чтобы сигнал упал до нуля. При этом на соседних позициях датчик совершенно не реагирует на находящийся рядом магнит (чего не скажешь о герконах, которые я изначально хотел использовать, но забраковал по причине срабатывания нескольких штук сразу).

Оживляем электронный кран машиниста от электровоза Электроника, Техника, Timeweb, Электровоз, Сборка, Инженер, Поезд, Telegram (ссылка), Длиннопост

Теперь ищем подходящий обломок макетной платы, засовываем его в недра крана и отмечаем на нём позиции.

Оживляем электронный кран машиниста от электровоза Электроника, Техника, Timeweb, Электровоз, Сборка, Инженер, Поезд, Telegram (ссылка), Длиннопост

И в соответствии с метками запаиваем датчики. Припаиваем провода.

❯ Прошивка контроллера


Теперь очередь софта. Само собой, кран оживлялся для сборки домашнего пульта машиниста. И у меня была идея повесить все составляющие тренажёра на RS-485, чтобы не переделывать каждый раз плату, а просто модифицировать прошивку. Поэтому пишем такой скетч:

#define RX 9
#define TX 8
#define MAX485 7

#define SEND 1
#define RECEIVE 0

#define DEVICE_ID 0x82

#define MIN_SENSOR_VALUE 100

#include <SoftwareSerial.h>

SoftwareSerial host(RX, TX); // RX, TX

uint16_t hallReadings[7];

uint8_t getAbsolutePosition() {
for (int i = 0; i < 7; i++) {
hallReadings[i] = analogRead(i);
Serial.print("Channel ");
Serial.print(i + 1);
Serial.print(" ");
Serial.println(hallReadings[i]);
}
Serial.println();
for (int i = 0; i < 7; i++) {
if (hallReadings[i] <= MIN_SENSOR_VALUE) return i + 1;
}
return 0;
}

void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
host.begin(4800);
pinMode(MAX485, OUTPUT);
digitalWrite(MAX485, RECEIVE);
}

void loop() {
// put your main code here, to run repeatedly:
uint8_t currentPosition = 0, previousPosition = 0;
currentPosition = getAbsolutePosition();
if (currentPosition != 0) {
previousPosition = currentPosition;
}
if (host.available()) {
if (host.peek() == DEVICE_ID) {
host.read();
digitalWrite(MAX485, SEND);
host.write(previousPosition);
digitalWrite(MAX485, RECEIVE);
}
else host.read();
}

Тут всё просто — считываем код позиции и, если он не равен нулю (что бывает в момент переключения крана), сохраняем его. Попутно слушаем шину и в случае поступления байта 82h (что и есть 130 в десятичной системе) отправляем в ответ код позиции.

❯ Собираем


С железом почти покончили, время уместить все железки внутри крана.

Примеряем плату и убеждаемся, что датчики не перекрываются и не мешают ходу рычага.

Оживляем электронный кран машиниста от электровоза Электроника, Техника, Timeweb, Электровоз, Сборка, Инженер, Поезд, Telegram (ссылка), Длиннопост

И после этого окончательно засовываем её туда. После недолгих раздумий посадил её на манну небесную лайфхакеров горячий клей — если вдруг найду оригинальную плату, будет проще ликвидировать эту. Укладываем провода так, чтобы они не мешали ходу рычага, и ставим на место крышку. Можно пробовать.

❯ Ещё раз про контроллер


Как оказалось, использованная изначально Raspberry Pico для такой задачи подошла так себе, в частности, несмотря на то, что USB HID с виду работал нормально, в некоторых играх (например, Metrostroi) контроллер либо в принципе не работал, либо работал неадекватно (перескакивая позиции или вообще зависая). С чем это связано, понять так и не вышло.

Оживляем электронный кран машиниста от электровоза Электроника, Техника, Timeweb, Электровоз, Сборка, Инженер, Поезд, Telegram (ссылка), Длиннопост

Поэтому в качестве контроллера ввода была взята Arduino Micro (на которую залит скетч на базе библиотеки Joystick.h), с которой проблем не наблюдалось. На плате разместился чип 74HC165 для приёма сигналов с контроллера и два DIP-переключателя, пока что зарезервированных. Также там была установлена та самая MAX485, к которой будет подключено всё остальное железо, включая этот кран.

❯ Софт


Изначально я подключал контроллер к Trainz. Но товарищи, уже имевшие опыт в создании пультов машиниста, подсказали, что лучше всего использовать ZDSimulator.

Оживляем электронный кран машиниста от электровоза Электроника, Техника, Timeweb, Электровоз, Сборка, Инженер, Поезд, Telegram (ссылка), Длиннопост

Для неё (а точнее, для версии 54.006) специально написан софт, позволяющий управлять поездом при помощи обычного джойстика.

Оживляем электронный кран машиниста от электровоза Электроника, Техника, Timeweb, Электровоз, Сборка, Инженер, Поезд, Telegram (ссылка), Длиннопост

Назначаем позиции джойстика на кран машиниста, запускаем игру, и всё, можно трогаться.

❯ Вот как-то так


Вот так удалось вернуть к жизни очередной девайс из мира ЖД, попутно приблизив ещё на шаг готовый домашний тренажёр машиниста.
Само собой, я уже попробовал кататься с этим краном, ощущения непередаваемые. Никакой джойстик и уж тем более клавиши не смогут обеспечить того же.
Такие дела.

Ссылки


Показать полностью 25

Мое решение 3-х проблем MVx

Автор текста: Lynnfield

Итак, в прошлый раз я описал три проблемы, которыми, на мой взгляд, страдают все MVx и даже некоторые не MVx архитектуры. Если коротко, то это:

  • проблема остатка — при делении фичи на заявленные компоненты архитектуры остаётся либо «неделимая» часть фичи, либо лишние компоненты архитектуры;

Мое решение 3-х проблем MVx Разработка, Программирование, Android, Timeweb, Алгоритм, Программное обеспечение, Telegram (ссылка), Длиннопост
  • проблема масштабирования — при расширении фичи компоненты архитектуры начинают раздуваться, что усложняет дальнейшую поддержку;

Мое решение 3-х проблем MVx Разработка, Программирование, Android, Timeweb, Алгоритм, Программное обеспечение, Telegram (ссылка), Длиннопост
  • и проблема разрывов логики, когда из-за взаимодействия с UI логика разрывается на части, что тоже не помогает нам делать систему более цельной, предсказуемой и тестируемой.

Мое решение 3-х проблем MVx Разработка, Программирование, Android, Timeweb, Алгоритм, Программное обеспечение, Telegram (ссылка), Длиннопост

Описание проблем это, конечно, хорошо, но вопрос в том, как их решать? Об этом я бы и хотел поразмышлять в этом тексте. Спойлер: когда я нашел решение проблемы разрывов, я понял, что оно может решить и все остальные проблемы.

❯ Проблема остатка (Remainder issue)


Первый вопрос: что делать с остатком? Все просто — взять делитель поменьше, потому что чем меньше делитель, тем меньше остаток. Этому меня еще в школе научили. Но я столкнулся с тем, что это не работает с MVx архитектурами, потому что мой делитель, обычно, это набор определенных компонент, и введение новых — значит изменение архитектуры.

Возможно и вы с этим сталкивались, когда вводили всякие мапперы, делегаты, интеракторы (те, что репозитории репозиториев) и прочее. Помогли ли они мне? Нет. Лучшее решение, что я видел — это Flux- и ELM-like архитектуры, которые заявляют «чистую» функцию как единицу деления логики, но со всеми вытекающими отсюда удобствами и следующими за ними «эффектами».

Но решение проблемы остатка, даже если бы оно у меня было, не помогает мне решить проблему масштабирования.

❯ Проблема масштабирования (Scalability issue)


В прошлый раз я упоминал «интуитивный» подход к решению задачи масштабирования и рассказывал почему он не работает. По крайней мере не у меня.

А какой не интуитивный?

На мой взгляд это старая и уже не раз решенная задача. И примеры решения можно увидеть в том, как в теории вычислений доказывают некоторые теоремы через вкладывание одной машины Тьюринга в другую, или как элегантно эта проблема решается в процессорах, где более сложные компоненты — просто композиция более простых.

Так и в MVx архитектурах: можно было бы попробовать реализовывать доработки отдельно, а уже потом объединять их с существующей фичей, вместо того, чтобы вносить изменения в уже написанные компоненты. Что в прошлом не раз приводило меня к череде переписываний тестов, судорожному протыкиванию приложения на предмет того, что ничего не поменялось, и мольбам о том, чтобы очередной баг-репорт был не по моим изменениям.Но вот что я заметил, ведь именно такой подход, когда мы предпочитаем композицию изменениям, я и мои коллеги используем для Data-слоев. Например, новые источники данных оборачиваются в Репозитории, а потом комбинируются в Интеракторы. Но почему-то чем ближе мы подходим к UI-слою, тем больше начинаем изменять, а не комбинировать.

Чаще всего я вижу эту проблему как вечное переписывание тестов уже существующих компонент, или Presenter, ViewModel, Controller размером со вселенную, который даже трогать страшно, потому что что-то точно развалится.

Такой подход, где мы предпочитаем покомпонентную композицию фичи и доработок, вместо прямых изменений какого-нибудь компонента, действительно будет не интуитивным, потому что потребует реализовывать доработки как самостоятельную фичу. Я имею ввиду, что надо будет имплементировать доработки используя наш архитектурный подход, а потом написать еще одну пачку компонент, которая уже будет склеивать существующий функционал с новым. Но каким бы правильным мне это не казалось, я никак не могу отделаться от мысли, что такой подход приведет к написанию большого количества кода, который на первый взгляд будет казаться бесполезным.

Мое решение 3-х проблем MVx Разработка, Программирование, Android, Timeweb, Алгоритм, Программное обеспечение, Telegram (ссылка), Длиннопост

Еще мне показалось интересным, что тут нам может помешать проблема остатка, которая по идее должна привести к ситуации, когда такой подход не сработает, потому что надо будет внедрить доработки в “середину” компонента из уже существующей фичи, а значит придется делить существующие компоненты на новые, более мелкие. Чем крупнее делитель, тем крупнее остаток, да?

Мое решение 3-х проблем MVx Разработка, Программирование, Android, Timeweb, Алгоритм, Программное обеспечение, Telegram (ссылка), Длиннопост

В итоге, даже использовав “неинтуитивный” подход к масштабированию, я все-равно не могу до конца понять как решить проблему масштабирования. А между прочим еще остается проблема разрывов.

❯ Проблема разрывов (Gaps issue)


И вот тут становится интересно. Все дело в Hello World. Мне все никак не дает покоя вопрос: какая у него архитектура?

Hello world


Я видел примеры Hello World в разных языках, фреймворках и архитектурах (кроме Open GL, конечно же), и у них не было проблем с его реализацией. Если не считать проблемой то, сколько усилий надо приложить, чтобы написать изначальный шаблон. Но, если результат одинаковый, не значит ли это, что разница только в том, сколько обвязок надо написать, чтобы Hello World работал? И нужны ли они? Тогда я стал думать: а что общего у всех этих реализаций Hello World в разных архитектурах? И как-то я пришел к мысли, что скорее всего правильный ответ — Алгоритм. И он до безобразия тривиален.

Мое решение 3-х проблем MVx Разработка, Программирование, Android, Timeweb, Алгоритм, Программное обеспечение, Telegram (ссылка), Длиннопост

И что интересно, у самого алгоритма нигде не написана архитектура в которой он должен быть имплементирован. Но это Hello World. Как я и сказал: он чересчур прост.

Более интересные примеры


Давайте лучше взглянем на следующий пример, который используют в учебниках по программированию — Hello %username%. У него все та же проблема с архитектурами — его можно написать в любой из них, и общее между всеми реализациями в разных архитектурах — алгоритм.

Мое решение 3-х проблем MVx Разработка, Программирование, Android, Timeweb, Алгоритм, Программное обеспечение, Telegram (ссылка), Длиннопост

А вот еще интересное наблюдение: если мы немного обобщим алгоритм Hello World, отделив show от Hello World, то увидим, что он дважды появляется в алгоритме этого примера.

Все еще слишком просто, правда? Следующий учебный пример — работа со структурами данных. И в самом простом виде — это CRUD плюс “показать все” с хранением в списке (он же List). Этот пример, не очень интересный с точки зрения реализации, интересен тем, что он добавляет в предыдущий алгоритм композицию.

По сути здесь мы первый раз сталкиваемся с тем, что нам надо создать пять независимых программ, а потом объединить их под управлением шестой. А еще эти шесть программ делят между собой один блок памяти — сам список структур. И мне кажется, что это уже напоминает решение одной из наших проблем, не так ли?

Мое решение 3-х проблем MVx Разработка, Программирование, Android, Timeweb, Алгоритм, Программное обеспечение, Telegram (ссылка), Длиннопост

Появление Gaps issue


Но что происходит даже с этими простыми программами, когда мы пытаемся перенести их в UI-среду?

Легче всего Hello World, потому что он просто обрастает кучей компонент, которые помогают ему “жить” в новой среде. Даже не интересно.

А вот Hello %user name% приходится куда сложнее. Беднягу размазывает по компонентам системы или архитектуры: в одном месте мы слушаем ввод имени, в другом показываем приветствие, а в третьем прописываем реакцию на введенное имя.

Я даже боюсь говорить о том, что же происходит с CRUD-примером. В зависимости от того, какой макет нам нарисуют, мы будем писать совершенно разные приложения. Вот представьте, что вас попросили сделать такую программу как несколько разных экранов, а потом попросили переделать так, чтобы это был один экран. С часто используемым подходом к декомпозиции, когда один экран — один набор MVx-компонент, мы получим бессонную ночь переписывания кода, потому что части нашей логики разорваны и раскиданы по всей реализации.

Мое решение 3-х проблем MVx Разработка, Программирование, Android, Timeweb, Алгоритм, Программное обеспечение, Telegram (ссылка), Длиннопост


Но ведь изначально “не было ни единого разрыва”, а алгоритм остался тем же. Почему все стало так плохо?

Причина — асинхронность


На этот вопрос некоторые уже дали ответ в комментариях к предыдущим статье и видео, и я с ними полностью согласен. Причина — асинхронность. И я был искренне удивлен, когда пришел к этому выводу.

Многие, если не все GUI-системы построены вокруг event loop, потому что нам надо одновременно и экран рисовать, и ввод от пользователя слушать. А чтобы сюда добавить еще и наш алгоритм, его придется разделить так, чтобы он хорошо встраивался в этот event loop.

Я уже не говорю о том, что мы вообще-то еще должны взаимодействовать с другими асинхронными системами. Кстати, с ними то, обычно, проблем и не возникает. А почему?

Решение — закрытие разрыва

Мое решение 3-х проблем MVx Разработка, Программирование, Android, Timeweb, Алгоритм, Программное обеспечение, Telegram (ссылка), Длиннопост

Обратим внимание на графикоподобную картинку, на которой я объяснял проблему разрывов в прошлый раз.

Напомню как всё было, и в этот раз уже не буду лукавить: путь нашей логики начинается в каком-то из callback’ов, а не в абстрактном “начале”. По мере выполнения мы продвигаемся все глубже по стеку вызовов, выполняем одну за другой функции, и в самой верхней точке нашего графика мы обращаемся к источнику данных: бэкенду, файлу, какой-то системе хранения. И что здесь обычно находится?

Мое решение 3-х проблем MVx Разработка, Программирование, Android, Timeweb, Алгоритм, Программное обеспечение, Telegram (ссылка), Длиннопост

Обычно это вызов какой-то “асинхронной” функции: корутины, async- или suspend- функции, уж простите мой котлинский, или какой-то функции с callback’ом, или функции возвращающей какой-нибудь Future, Promise или Single.

И вот вопрос: вызывая эту функцию с callback’ом, как часто мы задумываемся, что эта операция может вообще никогда не вернуться в этот callback? Лично я до недавнего времени считал, что управление гарантированно будет передано в наш callback. Не считая случаев “отмены”, конечно же. Но откуда у нас такая гарантия? Возможно все дело в реализации системы? Давайте “заглянем под капот” и посмотрим что же там на самом деле происходит.

Наша функция формирует наш запрос к базе, запрос в сеть или еще что-то. В общем случае формирует какой-то контекст, с помощью которого надо выполнить запрос, и вместе с callback’ом, в который надо вернуть результат, отправляет его на другой поток, и там происходит все выполнение. После завершения выполнения, тот поток вызывает callback, передавая в него результат, что для нас, разработчиков, выглядит как своего рода возврат в точку вызова. Таким образом логика выглядит более цельной, и такого разрыва, как в случае с UI не происходит.

Мое решение 3-х проблем MVx Разработка, Программирование, Android, Timeweb, Алгоритм, Программное обеспечение, Telegram (ссылка), Длиннопост

Так вот вопрос: а почему бы нам не повторить этот же трюк с UI?

На картинке это будет выглядеть как параллельный перенос: мы просто поднимем нашу линию, а вот тут, в нижней точке, вместо того чтобы разрывать логику и отдельно задавать на UI какое-то состояние и callback’и, сделаем функцию, которая отправляет запрос на UI и ждет от него ответа. Таким образом мы закрываем разрыв и теперь наша логика будет выглядеть как единое целое.

Мое решение 3-х проблем MVx Разработка, Программирование, Android, Timeweb, Алгоритм, Программное обеспечение, Telegram (ссылка), Длиннопост

Ничего сложного, мы даже не изобретаем что-то новое, но такой подход поможет нам взаимодействовать с UI, как с любой другой внешней системой, а не как с чем-то особенным. И вот моё видение того, как это могло бы работать и решать проблемы, описанные выше.

❯ Proposal


Давайте писать функции…

Да, может звучать нелогично, тем более, что я уже говорил о том, что это не помогает Flux- и ELM-like архитектурам, но я объясню. Начнем с проблемы остатка.

Влияние на решение проблемы остатка


Добавлю небольшую аналогию с математикой. Как я и говорил «архитектура» — это делитель. А чтобы при делении не оставалось остатка — нам нужно найти наибольший общий делитель. Чем и является функция, на мой взгляд. Чем больше я смотрю на реализации всех наших «архитектур», тем больше я вижу, что все они, по сути, просто один из способов удобнее объединять и специализировать функции (и тут я подразумеваю, что метод класса — это функция, которая иногда неявно принимает дополнительный аргумент).

Дальше лучше — проблема масштабирования.

Решение проблемы масштабирования


Функции очень хорошо масштабируются, потому что, с точки зрения реализации, они могут вмещать в себя любой набор инструкций и в том числе вызовы других функций, а с точки зрения пользователя функции это всегда просто вызов функции: имя, параметры, результат, независимо от того как она реализована.

А что с разрывами?

Решение проблемы разрывов


До тех пор, пока мы будем поддерживаем нашу логику, как композицию функций, проблема разрывов будет естественным образом «выталкиваться наружу», за пределы нашей логики. А это в свою очередь будет гарантировать нам последовательность выполнения, тестируемость и как следствие — стабильность.

❯ Концепт


Так что же я предлагаю?

Во-первых, реализовывать логику, как функции и их композицию, а не как компоненты какой-нибудь архитектуры. Это позволит нам гарантировать и поддерживать последовательность выполнения, позитивно скажется на масштабируемости и тестируемости нашего кода, да и понимать такой код будет проще.

Мое решение 3-х проблем MVx Разработка, Программирование, Android, Timeweb, Алгоритм, Программное обеспечение, Telegram (ссылка), Длиннопост

Во-вторых, у этой функции (композиции функций) должна быть возможность работать независимо от «сторонних» систем, поэтому я предлагаю вынести ее в свой поток, чтобы у нее была возможность спокойно выполняться, блокироваться при необходимости, параллелиться и тому подобное. Пусть будет “синхронной”. Обычно мне не надо, чтобы логика продолжала свое выполнение, когда она ждет какой-то ресурс. А если такое поведение нужно, то почему-бы его не описать его явно? И назвать бы этот поток Main, но имя уже “занято”. =)

В-третьих, хотя это и самый важный пункт, а у меня видимо есть тенденция оставлять все важное на потом, я предлагаю сосредоточиться на реализации логики приложений, а не экранов и виджетов. Как видите, с таким подходом нет разницы между слоем данных и пользователем. Есть только наша детерминированная логика и внешние системы, которые обмениваются данными через нее. Логика просто ходит между ними и предоставляет им некий контекст для принятия решения и набор возможных действий, а внешние системы в свою очередь “отвечают” нашей логике руководствуясь представленным контекстом. Это похоже на игру в шахматы, где внешние системы — игроки, а логика — доска с фигурами и правила игры.

Мое решение 3-х проблем MVx Разработка, Программирование, Android, Timeweb, Алгоритм, Программное обеспечение, Telegram (ссылка), Длиннопост

Логика наших фич зачастую не зависит от представления, а как раз наоборот: представление является способом, который помогает логике взаимодействовать с пользователем в определенной среде, как какой-нибудь адаптер. Я думаю, что такой адаптер должен быть плагином к логике, а не фактором определяющим ее.

В конце концов, применив этот концепт, я хочу помочь всем нам проектировать и писать кроссплатформенные приложения в самом широком смысле этого слова: разрабатывая и реализуя end-to-end алгоритмы которые прозрачно перескакивают с бэкенда на фронт и обратно, которые не видят различия между разными видами фронтов, будь то Web, iOS или Android, или разными типами вроде UI, CLI, или TalkBack.

Но пока это только концепт и виденье. Пожалуй пора посмотреть на код, но он будет в следующий раз. А сейчас есть время порефлексировать на эту тему. Дайте этим идеям время перевариться. Прочитайте еще раз. Задайте вопросы. И может вы сможете написать код еще до того, как я опубликую продолжение. Хотите посоревноваться?

Увидимся.


Показать полностью 14

Японский видеомагнитофон! Делаем ретро-фото в стиле VHS на смартфон

Автор текста: vladkorotnev

Японский видеомагнитофон! Делаем ретро-фото в стиле VHS на смартфон Электроника, Техника, Гаджеты, Timeweb, VHS, Ретро, Ремонт, Видео, YouTube, Длиннопост

И вот уже после заголовка рука сама тянется к минусу, в ожидании статьи с рекламой очередного приложения «VHS ретро звездец стильный камера инстаграм 2022 голливуд эффекты» от какого-то сомнительного разработчика :-)

Увы, я и сам был бы рад, если бы всё так было просто. Однако для меня, как и большинства людей, заставших видеокассеты вживую, снимки, сделанные через такие приложения, смотрятся ненатурально и некрасиво — то бишь, как говно.

Поэтому в этот раз мы пойдём более закрученным путём.

❯ Источник изображения


От хорошего товарища, с которым мы в прошлой статье хабарили чипы, перепала пара интересных трансляционных камер из восьмидесятых. Характерное их отличие от более современных «твердотельных» аналогов в том, что для захвата кадра используется электронно-лучевая трубка!

Victor GX-S700

Японский видеомагнитофон! Делаем ретро-фото в стиле VHS на смартфон Электроника, Техника, Гаджеты, Timeweb, VHS, Ретро, Ремонт, Видео, YouTube, Длиннопост

Поциэнт в процессе чистки от налипшего за 20 лет всего что можно


Первый экземпляр был в плюс-минус неплохом состоянии, и заработал сразу же после подачи питания с лабораторника. Периодически пропадало изображение, но это решилось пробрызгиванием «контаклином» всех переключателей на боковой панели.

Внутри у неё используется цветная трубка «Сатикон». Из-за этого камера весьма прожорлива по свету.

Также имеется знакогенератор, позволяющий выставлять дату аж до 99 числа 99 месяца 99 года, и набирать титры двумя размерами шрифтов.

Японский видеомагнитофон! Делаем ретро-фото в стиле VHS на смартфон Электроника, Техника, Гаджеты, Timeweb, VHS, Ретро, Ремонт, Видео, YouTube, Длиннопост

Набор текста на знакогенераторе через видоискатель камеры

Помимо BNC для видеовыхода и входа синхронизации, камера использует проприетарный разъём по типу советских ОНЦ для соединения с видеомагнитофоном.

Японский видеомагнитофон! Делаем ретро-фото в стиле VHS на смартфон Электроника, Техника, Гаджеты, Timeweb, VHS, Ретро, Ремонт, Видео, YouTube, Длиннопост

Да-да, в те годы магнитофон ещё не помещался в камеру, и поэтому его нужно было носить с собой отдельно! Страшно представить, с какой скоростью жрало батарейки такое чудесное сочетание. Видеомагнитофон у меня есть тоже, но из-за отсутствия кабеля между ним и камерой он малость бесполезен.

К счастью, разработчики магнитофона подумали если не о вашей спине, то хотя бы о вашем кошельке. Ну скажите, вот зачем вам покупать два видеомагнитофона, если в то время, когда вы на улице снимаете кино на второй, смотреть первый в доме всё равно некому?

Поэтому вы просто нажимаете на кнопку на своём «домашнем» видаке, и обычный видак превращается…

Японский видеомагнитофон! Делаем ретро-фото в стиле VHS на смартфон Электроника, Техника, Гаджеты, Timeweb, VHS, Ретро, Ремонт, Видео, YouTube, Длиннопост

В два раздельных блока — ТВ-тюнер и зарядку, которые остаются в стойке, и, собственно, сам видеомагнитофон, к которому вы цепляете ремень, аккумулятор, и уносите с собой.

Питание имеет значение


Однако, в 2024 году питать видеокамеру от никелевых или свинцовых аккумуляторов уже как-то не комильфо — заряжать долго, ресурс вырабатывается быстро, да и ноги спасибо не скажут.

В своё время, снимая на обычную VHS-камеру, я какими только извращениями не занимался:

Японский видеомагнитофон! Делаем ретро-фото в стиле VHS на смартфон Электроника, Техника, Гаджеты, Timeweb, VHS, Ретро, Ремонт, Видео, YouTube, Длиннопост

Не взорвался — значит, день удался!

К счастью, с тех пор на нашу голову был ниспослан такой стандарт, как USB Power Delivery, для которого нынче выпускается великое множество источников питания и аккумуляторов.

Поэтому заказываем с амазона сомнительную китайскую платку:

Японский видеомагнитофон! Делаем ретро-фото в стиле VHS на смартфон Электроника, Техника, Гаджеты, Timeweb, VHS, Ретро, Ремонт, Видео, YouTube, Длиннопост

Выставляем её на 12 вольт и… сюрприз-сюрприз — то, что устройство запрашивает то или иное напряжение, вовсе не означает, что источник должен его предоставить. 12 вольт при этом не является напряжением, требуемым стандартом к реализации. Поэтому настольный китайский зарядник спокойно его выдаёт, а вот купленный под это дело поварбанк — нет, несмотря на наличие 12 вольт на маркировке.

Японский видеомагнитофон! Делаем ретро-фото в стиле VHS на смартфон Электроника, Техника, Гаджеты, Timeweb, VHS, Ретро, Ремонт, Видео, YouTube, Длиннопост

К счастью, согласовывается ближайшее низкое напряжение — в данном случае 9 вольт, которых камере оказывается достаточно для полноценной работы.

Попутно выясняется второй подводный камень — для работы АЦП нужно так же и 5 вольт через miniUSB, а купленный поварбанк при подключении двух и более устройств, сваливается назад к 5 вольтам на всех портах, чего камере уже недостаточно.

Импульсного преобразователя под руками не оказывается, поэтому припаиваем КРЕНку и подсовываем под неё железяку потолще для рассеивания примерно ватта мощности :-)

Также к выходным контактам припаиваем два кусочка стали из мусорки, и размещаем всё это барахло внутри задней заглушки камеры так, чтобы оно контачило с контактами аккумулятора.

Японский видеомагнитофон! Делаем ретро-фото в стиле VHS на смартфон Электроника, Техника, Гаджеты, Timeweb, VHS, Ретро, Ремонт, Видео, YouTube, Длиннопост

КРЕНка в прямом смысле присрана, так как через неделю очередная поездка в Акихабару, где уже можно будет купить импульсный преобразователь

Защёлкиваем этот тихий ужас на камеру, подключаем поварбанк — ура, камера запускается и показывает картинку. Искажения цвета при этом не настолько фатальные, чтобы их не вытягивал встроенный баланс белого — по крайней мере, в сравнении со стационарным источником питания :-)

«Мама, я хочу киношный риг!» — «Нет сынок, у нас уже есть киношный риг дома»


Камера — это, конечно, хорошо, но было бы неплохо картинку с неё и на что-нибудь записать. К счастью, на моём телефоне уже есть штатное приложение «Видеовход», которое может выводить и записывать картинку с любого устройства, поддерживающего USB Video Class — т.е. определяющегося в Windows как вебкамера, например.

Японский видеомагнитофон! Делаем ретро-фото в стиле VHS на смартфон Электроника, Техника, Гаджеты, Timeweb, VHS, Ретро, Ремонт, Видео, YouTube, Длиннопост

И таковое устройство у меня нашлось — карманная карта видеозахвата, купленная в своё время для того, чтобы стримить из аркад. Подключаем её к телефону, в неё втыкаем адаптер AV2HDMI, а в тот — видеокамеру. На удивление, «наушниковый» выход камеры оказался вполне себе линейным, поэтому никаких аттеньюаторов паять не пришлось.

Японский видеомагнитофон! Делаем ретро-фото в стиле VHS на смартфон Электроника, Техника, Гаджеты, Timeweb, VHS, Ретро, Ремонт, Видео, YouTube, Длиннопост

Обильно сдабриваем всё это липучкой-самоклейкой, и получаем новейший риг тысячелетия, на который хоть следующий «Оскар» снимать можно:

Японский видеомагнитофон! Делаем ретро-фото в стиле VHS на смартфон Электроника, Техника, Гаджеты, Timeweb, VHS, Ретро, Ремонт, Видео, YouTube, Длиннопост
Японский видеомагнитофон! Делаем ретро-фото в стиле VHS на смартфон Электроника, Техника, Гаджеты, Timeweb, VHS, Ретро, Ремонт, Видео, YouTube, Длиннопост

Скукоживаем картинку обратно


Остаётся последняя беда — встроенное приложение умеет писать только в 1080p, в соотношении сторон 16:9. Конвертер тоже применён самый дешёвый, и не умеет вписывать входное изображение в кадр правильно. Из-за этого картинка с камеры выглядит растянутой по ширине.

К сожалению, способа скорректировать это в самом приложении я не нашёл, а до декомпиляции его ещё руки не дошли. Однако, можно исправить это с помощью FFMPEG, который так же легко устанавливается на телефон. Параметры надо будет передать следующие:

-aspect 1440:1080 -c:v copy -c:a copy

Это лишь прописывает соотношение сторон в метаданные файла, но не перекодирует сами кадры, поэтому конвертация происходит моментально и без потерь качества.

Однако, не все приложения умеют обрабатывать эти метаданные корректно — например, твиттер всё равно показывает картинку растянутой. Напротив, ВК через Kate Mobile, а также Telegram X, загружают видео корректно. Также как и Google Photos, вследствие чего обрезанные/обработанные видео, а также сохранённые стоп-кадры имеют правильное соотношение сторон.

Смотрим на будущее из прошлого


После этого можно попробовать взять камеру на прогулку и поснимать на улице.

Японский видеомагнитофон! Делаем ретро-фото в стиле VHS на смартфон Электроника, Техника, Гаджеты, Timeweb, VHS, Ретро, Ремонт, Видео, YouTube, Длиннопост

Из-за какого-то дефекта звук иногда трещит, но в остальном картинка получается примерно такой, как и ожидаешь от видеокамеры из конца восьмидесятых.

Японский видеомагнитофон! Делаем ретро-фото в стиле VHS на смартфон Электроника, Техника, Гаджеты, Timeweb, VHS, Ретро, Ремонт, Видео, YouTube, Длиннопост

Больше кадров в таком духе можно посмотреть в Телеграме, который я специально под это дело завёл: «Японский магнитофон!»

Чем больше — тем лучше


Также мне перепала ещё и профессиональная трансляционная камера — Victor KY-1900.

Японский видеомагнитофон! Делаем ретро-фото в стиле VHS на смартфон Электроника, Техника, Гаджеты, Timeweb, VHS, Ретро, Ремонт, Видео, YouTube, Длиннопост

В отличие от предыдущей, в ней используется аж три видикона — по одному на каждый цвет!

Японский видеомагнитофон! Делаем ретро-фото в стиле VHS на смартфон Электроника, Техника, Гаджеты, Timeweb, VHS, Ретро, Ремонт, Видео, YouTube, Длиннопост

Вот они слева направо

Но увы — при первом включении оказалось, что синий канал не работает. Перетыкивания коннекторов привели к выводу, что проблема в плате обработки сигнала. То есть, где-то вот здесь:

Японский видеомагнитофон! Делаем ретро-фото в стиле VHS на смартфон Электроника, Техника, Гаджеты, Timeweb, VHS, Ретро, Ремонт, Видео, YouTube, Длиннопост

Выяснилось, что испортились танталовые конденсаторы в позициях C37 и C40 — такие конденсаторы имеют свойство при поломке образовывать не обрыв в цепи, а короткое замыкание, поэтому задающая яркость синего цепь была всегда притянута к земле. Найти их было легко, так как они очень сильно грелись. Шутка ли, через такую фитюльку рассеивать под 5 ватт!

Однако после этого синий цвет работал только при минимально установленном уровне чёрного, любая же установка выше этого сразу заполняла синим весь экран. Несколько недель перебора компонентов и с десяток ударов анодным в палец спустя оказалось, что всё-таки отгнила одна нога у подстроечника, а я считал, что уже проверил его, и всё это время ходил вокруг да около. Даже удлинитель спаял, чтобы плату во время работы камеры обмерять где только можно.

Японский видеомагнитофон! Делаем ретро-фото в стиле VHS на смартфон Электроника, Техника, Гаджеты, Timeweb, VHS, Ретро, Ремонт, Видео, YouTube, Длиннопост

До кучи маркировка на плате подкидывала приколов на некоторых компонентах. Кручу-верчу, запутать хочу!

Японский видеомагнитофон! Делаем ретро-фото в стиле VHS на смартфон Электроника, Техника, Гаджеты, Timeweb, VHS, Ретро, Ремонт, Видео, YouTube, Длиннопост

Плюс у С21 справа?

Японский видеомагнитофон! Делаем ретро-фото в стиле VHS на смартфон Электроника, Техника, Гаджеты, Timeweb, VHS, Ретро, Ремонт, Видео, YouTube, Длиннопост

Или таки слева?

Также у объектива при открытой диафрагме внутри торчала какая-то полоска. Она же создавала излишнее трение и мешала приводу автоэкспозиции нормально крутить колесо диафрагмы. Ну я и подумал, можно же аккуратненько разобрать объектив, загнуть её назад и собрать обратно.

Конечно же, при разборке я диафрагму уронил, лепестки разлетелись по полу, и следующие четыре часа я провёл, восстанавливая её по наитию :-) Зато теперь-то всё ходит идеально плавно и ничего ниоткуда не торчит!

Японский видеомагнитофон! Делаем ретро-фото в стиле VHS на смартфон Электроника, Техника, Гаджеты, Timeweb, VHS, Ретро, Ремонт, Видео, YouTube, Длиннопост


Последней преградой осталось питание — этой камере уже 9 вольт для работы недостаточно. Однако, через Quick Charge поварбанк таки согласился выдавать 12 вольт.

Так как триггер ждать не хотелось, то из загашников была достата ардуина и россыпь резисторов. Прошиваем туда QC3Control, подключаем по схеме. Питание включаем напрямую туда же — ведь в даташите на ардуину сказано, что она работает и от 12В, да и перемычка обхода понижающего преобразователя у меня не запаяна, так что всё должно быть хорошо.

Втыкаем в поварбанк. Ардуина загружается, согласует напряжение и тут же взрывается. Перемычка запаивается, из загашников достаётся ещё одна кренка, а на полях мозгов делается заметка, что официальные даташиты к деталям с алиэкспресса лучше не применять.

Японский видеомагнитофон! Делаем ретро-фото в стиле VHS на смартфон Электроника, Техника, Гаджеты, Timeweb, VHS, Ретро, Ремонт, Видео, YouTube, Длиннопост

В итоге «на соплях» проверить камеру удалось, однако для того, чтобы вытащить её на улицу, нужно всё ещё решить проблему с питанием АЦП. Здесь уже кренкой не обойтись — суммарное потребление не пролезает по току в лимиты поварбанка, да и так уже с полного заряда всего лишь 2 часа съёмки набирается. Поэтому фотографии с этой камеры будут уже после возвращения из очередной поездки.

Внутри дома снимает она вот так:


Видны характерные для камер на видиконах «хвосты» от светлых предметов, которые можно заметить в старых телепередачах, например, на бокалах или духовых музыкальных инструментах.

Картинка весьма тёмная, ведь в камере свет расщепляется на три луча, потом фильтруется по цветам, и оттуда попадает в отдельные видиконы, и без того не то чтобы очень чувствительные. Это тестовое видео было снято при максимальной, выжигающей глаза настройке люстры, да и автоматы на видео имеют весьма яркие в реальности светодиоды.

Однако в обычном дневном свете приходится диафрагму закрывать почти полностью даже в пасмурную погоду — удивительно, насколько велика разница, когда при восприятии человеческим глазом её как будто и нет.

Проверить это получится уже потом, когда я соберу по-нормальному кабель питания, и вытащу эту камеру на прогулку — если не отвалится спина и плечи, ведь она тяжелее предыдущей раза в два. Но об этом вы уже узнаете среди тонн фоток еды, Мику, и всякого древнего железного барахла, в моём Телеграм-канале :-)


Показать полностью 23 2

Как Алексей Пажитнов сделал сиквел Тетриса и забыл про него

Автор: TilekSamiev

Как Алексей Пажитнов сделал сиквел Тетриса и забыл про него Новости игрового мира, Тетрис, Алексей Пажитнов, Timeweb, NES, Длиннопост, Reddit (ссылка)

Тетрис — одна из самых (если не самая!) известных видеоигр, чьё имя известно даже людям, бесконечно далёким от этой индустрии. Когда в 1989 году «Тетрис» вышел на Nintendo Game Boy, он стал мировым хитом, продавшись миллионами копий и зарекомендовав себя как самая любимая в мире видеоигра-головоломка.

Для старинной видеоигры, которая начиналась как любительский проект компьютерного разработчика из СССР, влияние «Тетриса» по-прежнему сильно, доказательством чему служит огромная база игроков, по сей день пытающихся полностью пройти игру. Его успех также породил желание создать продолжение. Появились побочные продукты: такие как Hatris, Welltris и Wordtris, а также итеративные продолжения, такие как Tetris 2, Tetris DS и Tetris Effect. Но у игры могло бы быть ещё одно продолжение, которое так и не вышло. Сам создатель Тетриса, Алексей Пажитнов, придумал другую, более интеллектуальную версию игры.

На Game Developers Conference (GDC) 2024 Алексей Пажитнов рассказал о своих первоначальных планах по выпуску продолжения «Тетриса» и о том, почему мы только сейчас слышим об этом публично. Это запланированное продолжение, получившее название Tetris Reversed, было призвано изменить способ игры в тетрис. Но сиквел игры уже более десяти лет находится на стадии прототипа.

❯ Создание прототипа


Нет особого смысла приводить здесь историю Алексея Пажитнова и создания им оригинальной игры. При желании эту информацию можно найти в Википедии. Даже фильм сняли про это, многое конечно приукрасили (Голливуд же), но тем не менее. Можно упомянуть, что Пажитнов живет в США с 1991 года, где он участвовал в разработке таких игр, как Pandora’s Box, и работал с такими компаниями, как Microsoft и WildSnake Software. Помимо «Тетрис», он является автором таких игр, как Hatris, El-Fish и Hexic, а также многих других, которые углубили и расширили игровой дизайн. В 2007 году он был удостоен First Penguin Award на церемонии вручения наград Game Developers Choice Awards за прорыв в мире игр.

История продолжения Тетриса началась, когда хорватский разработчик Ведран Кланач посетил фестиваль игр NLGD в Нидерландах в 2011 году. Там Ведран разговорился с Мартином де Рондом из Guerrilla Games. Де Ронд заявил, что у него есть договоренность с Пажитновым о создании прототипа совершенно новой игры «Тетрис». Кланач естественно ухватился за возможность поработать с такой легендарной фигурой.

Как Алексей Пажитнов сделал сиквел Тетриса и забыл про него Новости игрового мира, Тетрис, Алексей Пажитнов, Timeweb, NES, Длиннопост, Reddit (ссылка)

Алексей Пажитнов и Ведран Кланач

Пажитнов придумал альтернативную версию игры под названием Tetris Reversed, в которой правила аналогичны обычному тетрису — игроки управляют падающими блоками, перемещая, вращая и размещая их, однако блоки падают перед цветными фоновыми пространствами, которые игрок пытается очистить. Т.е. тетрамино (блоки тетриса) использовались для устранения стены блоков, а не для складывания их друг в друга. Название «Reversed» происходит от того факта, что заполненные и пустые места могут меняться местами, инвертируя игровое поле. Примерный принцип игры можно посмотреть на Реддите, где три года назад уже сделали подобный реверсивный Тетрис.

Как Алексей Пажитнов сделал сиквел Тетриса и забыл про него Новости игрового мира, Тетрис, Алексей Пажитнов, Timeweb, NES, Длиннопост, Reddit (ссылка)

Де Ронд был посредником между Пажитновым и Кланачем – эти двое впервые лично встретились только в 2024 году. Де Ронд передавал инструкции по проектированию от Пажитнова Кланачу, который в свободное время создавал код игры на своем собственном движке. Кланач ныне является генеральным директором компании Ocean Media. Он был аэрокосмическим инженером, который начал свою карьеру в компании Croteam, где создал игровой движок для Serious Sam 2. За последние 20 лет он, в качестве программиста и исполнительного продюсера, поучаствовал в производстве более чем в 200 проектов.

Как Алексей Пажитнов сделал сиквел Тетриса и забыл про него Новости игрового мира, Тетрис, Алексей Пажитнов, Timeweb, NES, Длиннопост, Reddit (ссылка)

Основная часть работ по разработке Tetris Reversed была проведена в период с марта по ноябрь 2012 года. Однако к концу года проект выдохся. Прошло три года, а дальнейшего развития не последовало, что заставило самого Пажитнова предположить, что проект фактически мёртв, а прототип игры утерян.

Идея игры возникла вновь только в 2017 году, когда Кланач рассказал о ней Владу Мику, специалисту по развитию бизнеса. Мику решил лично познакомить Пажитнова с Кланачем, когда он и Кланач ужинали в апреле 2023 года вместе с Кейт Эдвардс, генеральным директором Geogrify и говорили о фильме «Тетрис». Тогда Кланач упомянул, что в его личных архивах в компьютерных файлах старого ПК с Windows 7 до сих пор хранится прототип игры под названием Tetris Reversed.

В 2024 году Влад Мику свел Пажитнова и Кланача на GDC 2024. Результатом стала специальная комиссия, в которую вошли Кейт Эдвардс, Влад Мику, Алексей Пажитнов и Ведран Кланач – четыре ключевые фигуры в возрождении прототипа.

Как Алексей Пажитнов сделал сиквел Тетриса и забыл про него Новости игрового мира, Тетрис, Алексей Пажитнов, Timeweb, NES, Длиннопост, Reddit (ссылка)

Кейт Эдвардс, Влад Мику, Ведран Кланач и Алексей Пажитнов

Пажитнов, который почти забыл о существовании прототипа, приветствовал возрождение игры. Он сказал, что это Tetris для людей с IQ 300. В оригинальной игре игрок сосредоточен лишь на части экрана: появляется блочок, который нужно куда-то перетащить и разместить. Теперь же игроку придется использовать всё игровое поле на экране сразу. По словам разработчиков, это приближает Tetris Reversed к настольным играм, вдохновившим оригинал. В отличие от оригинального тетриса, в который можно играть в течение длительного времени, Reversed был разработан для более коротких сессий, некоторые из которых длились до десяти минут. Основываясь на уровнях и выборе, Пажитнов заявил, что на некоторых уровнях выиграть может быть «абсолютно невозможно» в зависимости от того, как были установлены фоновые блоки.

❯ Тетрис наоборот

Основная механика игры, описанная и изображенная на фотографиях слайдов, такова:

Поле игры:

  • Пользователь имеет игровое поле, состоящее из сетки из 10 столбцов на 20 строк.

  • Каждый квадрат имеет два состояния: полный (серый) или пустой (чёрный).

Как Алексей Пажитнов сделал сиквел Тетриса и забыл про него Новости игрового мира, Тетрис, Алексей Пажитнов, Timeweb, NES, Длиннопост, Reddit (ссылка)

Игровой раунд

Каждый игровой раунд начинается с появления фигуры на игровом поле. Игрок может выполнить одно из двух действий:

  • Разместить фигуру на поле;

  • Инвертировать поле.

Как Алексей Пажитнов сделал сиквел Тетриса и забыл про него Новости игрового мира, Тетрис, Алексей Пажитнов, Timeweb, NES, Длиннопост, Reddit (ссылка)

Существуют также две добавленные механики:

Неразмещаемая клетка:

  • Неразмещаемая клетка – это клетка, на которую нельзя поставить фигуру.

  • Заполненная неразмещаемая клетка представлена заполненным квадратом со значком желтого шара.

  • Пустая неразмещаемая клетка представлена пустым квадратом со значком чёрного шара.


Клетка инвертирования поля:

  • Клетка инвертирования поля представлена значком молнии.

  • Если фигура помещена на клетку «Инвертировать поле», игрок получает +1 действие «Инвертировать поле» для дальнейшего использования.

❯ Будет ли официальный релиз Tetris Reversed?


Как говорит Алексей Пажитнов, он и Кланач выполнили свою работу:

«Я завершил концепцию, развитие, идеи и всё, что есть в Tetris Reversed. Это было на предварительном этапе, и с этим прототипом мы были готовы начать производство. Но в данном случае производство так и не началось, поэтому нам пришлось ждать следующего этапа, чего так и не произошло, потому что доводить его до конца — не наша работа. В то время у Мартина де Ронда было слишком много дел, поэтому он отложил этот этап производства, вероятно, потому, что у него были проблемы с The Tetris Company и получением разрешения на продолжение работы над этой версией игры. Он закрыл для себя это дело и пошел дальше, и именно поэтому Tetris Reversed так и не был выпущен».

Как Алексей Пажитнов сделал сиквел Тетриса и забыл про него Новости игрового мира, Тетрис, Алексей Пажитнов, Timeweb, NES, Длиннопост, Reddit (ссылка)

Пажитнов и Кланач заявили, что запланированная игра имеет потенциал, и надеются когда-нибудь вернуться к ней, при условии, что им удастся найти заинтересованных в ней инвесторов и издателей. А в последние годы наблюдается большой интерес к отменённым и устаревшим концепциям игр, и Tetris Reversed — это действительно интригующий взгляд на альтернативную версию Тетриса.

Есть много примеров, когда отменённые проекты видеоигр набирали обороты и выпускались спустя годы после цикла их разработки. Для компании Tetris же оригинальная игра по-прежнему является дойной коровой, и по каким-то неведомым причинам они, почему-то, не смогли найти подходящую возможность для Tetris Reversed.

Увидим ли мы когда-нибудь, как Tetris Reversed будет выпущен как эксклюзив для Nintendo Switch 2? Возможно. А в это время в Интернете уже можно найти и скачать бесплатные неофициальные игры под названием Tetris Reversed. Некоторые загружают на Гитхаб код собственной версии Tetris Reversed.

И хотя Tetris Reversed, возможно, никогда не увидит свет, оригинальная игра, вдохновившая его, по-прежнему популярна, несмотря на солидный возраст в четыре десятилетия.

Как Алексей Пажитнов сделал сиквел Тетриса и забыл про него Новости игрового мира, Тетрис, Алексей Пажитнов, Timeweb, NES, Длиннопост, Reddit (ссылка)

Даже за последние несколько месяцев спидранеры несколько раз превосходили рекорд версии для NES. После того как в январе 2024 года Уиллис «Blue Scuti» Гибсон стал первым человеком, который полностью прошёл игру, другой игрок – Энди «P1xelAndy» Артиага – в феврале набрал 8 952 432 очка, побив рекорд Гибсона. Всего несколько недель спустя Алекс Тач почти удвоил рекорд Артиаги, набрав 16 248 080 очков, выиграв 2600 долларов и став первым человеком, преодолевшим отметку в 10 миллионов очков.

Однако так называемая “последняя задача” — прохождение уровня 255 и перезагрузка игры — остается непобеждённой. Может у вас получится?


  • Написано специально для Timeweb Cloud и читателей Пикабу. Подписывайтесь на наш блог, чтобы не пропустить новые интересные статьи.

  • Облачные сервисы Timeweb Cloud — это реферальная ссылка, которая может помочь поддержать наши проекты.

Показать полностью 8

Сборка MS-DOS 4.0

Автор текста: dlinyj

Сборка MS-DOS 4.0 Гаджеты, Электроника, Программирование, Разработка, Программа, Техника, Timeweb, DOS, Длиннопост

Совсем недавно появилась следующая новость: На GitHub опубликован исходный код MS-DOS 4.00 под лицензией MIT. Раз появились исходные коды, стало сразу интересно: а можно ли собрать эту операционную систему?

Задача оказалась нетривиальной и совсем неочевидной. Оказывается, что исходные файлы DOS не так-то уж и легко переносятся в git, и уж как минимум, не как текстовые файлы в кодировке UTF-8. Но, к счастью, в отличие от утечек исходников MS-DOS 6.0, здесь имеется полный комплект файлов и инструментов, достаточный для корректной сборки и тестирования. Остались сущие нюансы, которые попили много крови.

Поэтому я, как и многие — начал свои эксперименты по сборке MS-DOS 4.0, с исправлением ошибок, а также возможностью исследования исходных кодов и тестирования их на реальном железе.

В статье же изложено краткое руководство по сборке и созданию загрузочной дискетки.

❯ Инструментарий


Собирать всё буду в Linux Mint (читай Ubuntu). Средой DOS для сборки выбрал dosbox, к сожалению, это не самый лучший вариант, потому что там идёт замедление частоты (чтобы старые программы корректно работали), поэтому сборка идёт достаточно долго. Лучше всего использовать любой удобный DOS, запущенный в виртуальной машине.

Для создания загрузочной дискеты и тестирования полученной сборки буду задействовать виртуальную машину qemu. А чтобы получить дискеты с готовым образом, я буду использовать установочную дискету MS-DOS 4.0 (найденную тут см. 4.00 OEM [Sampo]).

Прежде чем пойдём дальше — важное замечание:

Никаких чужих прав задеть не собираюсь, все модификации кода были сделаны исключительно в юмористических целях, и не подлежат распространению. Модифицированные исходники удалены.

❯ В чём сложности сборки?


Проблемы две:

  1. Некорректная инициализация переменных среды (в самом bat-файле SETENV.BAT содержится ошибки или опечатки).

  2. Проблемы с кодировкой при переносе кода с дискеток DOS в GIT с кодировкой UTF-8.


Первая проблема легко исправляется даже самостоятельно, при беглом анализе исходного кода. Она легко вскрывается при сборке, дальше просто необходимо внести правки, либо создать свой обновлённый bat-файл, который будет инициализировать переменные среды окружения.

Значительно сложнее обстоят дела с тем, что в части кода, при переносе в UTF-8, побились некоторые символы. У меня была попытка сборки, которую я описывал у себя в ЖЖ, и, в конце концов, я получил вот это:

Сборка MS-DOS 4.0 Гаджеты, Электроника, Программирование, Разработка, Программа, Техника, Timeweb, DOS, Длиннопост

Это достаточно частая и болезненная проблема со старыми исходниками времён DOS. С аналогичной задачей я столкнулся и при попытке собрать программу RAM View. Об этом пути и исправлении проблемы, я подробно написал в статье Правка чужого кода.

Здесь же мы исключим ручной труд и автоматизируем исправление проблем с кодировками.

❯ Подготовительные операции перед сборкой


Итак, шаги по сборке ДОС. Клонируем оригинальный репозиторий:

git clone https://github.com/microsoft/MS-DOS.git

Исправляем проблемы с кодировками:

sed -i -re 's/\xEF\xBF\xBD|\xC4\xBF|\xC4\xB4/#/g' MS-DOS/v4.0/src/MAPPER/GETMSG.ASM
sed -i -re 's/\xEF\xBF\xBD|\xC4\xBF|\xC4\xB4/#/g' MS-DOS/v4.0/src/SELECT/SELECT2.ASM
sed -i -re 's/\xEF\xBF\xBD|\xC4\xBF|\xC4\xB4/#/g' MS-DOS/v4.0/src/SELECT/USA.INF

Переходим в рабочую папку:

cd MS-DOS/v4.0

Перекодируем все текстовые файлы в формат MS-DOS:

find -iname '*.bat' -o -iname '*.asm' -o -iname '*.skl' -o -iname 'zero.dat' -o -iname 'locscr' | xargs unix2dos -f
find -iname '*.BAT' -o -iname '*.ASM' -o -iname '*.SKL' -o -iname 'ZERO.DAT' -o -iname 'LOCSCR' | xargs unix2dos -f


и создаём там обновлённый бат-файл для переменных среды окружения, следующего содержания:

$ cat src/e.bat
@Echo off
echo setting up system to build the MS-DOS 4.01 SOURCE BAK...
set CL=
set LINK=
set MASM=
set COUNTRY=usa-ms
set BAKROOT=e:
rem BAKROOT points to the home drive/directory of the sources.
set LIB=%BAKROOT%\src\tools\bld\lib
set INIT=%BAKROOT%\src\tools
set INCLUDE=%BAKROOT%\src\tools\bld\inc
set PATH=%BAKROOT%\src\tools;%PATH%

В принципе этих операций достаточно для сборки, а то что ниже — это лично моё хулиганство, чтобы продемонстрировать, что DOS в действительности собрался, и нет подмены файлов. Я заменяю компанию Microsoft своим ником:

find -name "*.ASM" -type f -exec sed -i 's/Microsoft/Dlinyj/g' {} +
find -name "*.INC" -type f -exec sed -i 's/Microsoft/Dlinyj/g' {} +
find -name "*.H" -type f -exec sed -i 's/Microsoft/Dlinyj/g' {} +
find -name "*.MAC" -type f -exec sed -i 's/Microsoft/Dlinyj/g' {} +
find -name "*.MSG" -type f -exec sed -i 's/Microsoft/Dlinyj/g' {} +
find -name "*.C" -type f -exec sed -i 's/Microsoft/Dlinyj/g' {} +
find -name "*.CLB" -type f -exec sed -i 's/Microsoft/Dlinyj/g' {} +
find -name "*.SKL" -type f -exec sed -i 's/Microsoft/Dlinyj/g' {} +

Всё, теперь исходники подготовлены, для того чтобы их можно было корректно собрать.

❯ Сборка


Собирать буду в dosbox, как показала практика — это не самое лучшее решение, сборка занимает около часа, что, мягко скажем, раздражает.

Запускаю dosbox:

dosbox

Далее в нём монтирую текущую директорию как диск E.

mount e: ./

И переходим на диск e, запускаем в dosbox бат-файл, который инициализирует среду окружения, и начинаем сборку:

e:
cd SRC
e.bat

и запускаем сборку командой nmake:

Сборка MS-DOS 4.0 Гаджеты, Электроника, Программирование, Разработка, Программа, Техника, Timeweb, DOS, Длиннопост

Если вы делаете это в dosbox, то можно пойти погулять. Окончанием сборки будет выглядеть следующим образом:

Сборка MS-DOS 4.0 Гаджеты, Электроника, Программирование, Разработка, Программа, Техника, Timeweb, DOS, Длиннопост

После этого надо скопировать все собранные файлы в один каталог. Создаём каталог «4» в корне диска и копируем все бинарники специальным скриптом:

mkdir \4
CPY.BAT \4


Далее самое интересное:проверка того, что файлы запускаются. Для этого надо сделать так, чтобы dosbox прикидывался старым ДОСом. Выполняем следующую команду:

ver set 4.0

После переходим в каталог\4и можно выполнить в нёмcommand.com:

Сборка MS-DOS 4.0 Гаджеты, Электроника, Программирование, Разработка, Программа, Техника, Timeweb, DOS, Длиннопост

Хулиганство сработало, ДОС собрался и прикидывается, будто бы я его разработал. Дело стало за малым — протестировать это на реальном железе.

❯ Создание загрузочной дискетки


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

sys <path> a:

Но, факир был пьян, и фокус не удался. Поэтому решил MBR (Master Boot Record) позаимствовать с загрузочной дискетки DOS 4.0. К сожалению, MBR от MS-DOS 6.22 у меня не заработал.

Скачиваем установочные дискетки, попутно создаём пустую дискетку командой:

truncate --size 1474560 fdd.img

Загружаемся с установочной дискетки и ставим наш пустой образ 1,44 МБ дискетки в дисковод B, с помощью qemu:

qemu-system-i386 -fda Disk01.img -fdb fdd.img

Отменяем установку и форматируем дискету с переносом системных файлов:

Сборка MS-DOS 4.0 Гаджеты, Электроника, Программирование, Разработка, Программа, Техника, Timeweb, DOS, Длиннопост

По окончании можно закрывать окно qemu. Возвращаемся к окну с dosbox и монтируем полученный образ дискетки, с помощью следующей команды:

imgmount a: <path to fdd.img> -t floppy

И потом просто вручную переносим файлы COMMAND.COM, IO.SYS и MSDOS.SYS на дискету:

Сборка MS-DOS 4.0 Гаджеты, Электроника, Программирование, Разработка, Программа, Техника, Timeweb, DOS, Длиннопост

Всё, образ готов. Можно его протестировать в виртуальной машине, или даже записать на настоящую дискету и загрузиться!

Для запуска в qemu следует использовать следующую команду:

qemu-system-i386 -fda fdd.img

Сборка MS-DOS 4.0 Гаджеты, Электроника, Программирование, Разработка, Программа, Техника, Timeweb, DOS, Длиннопост

Записать на дискетку можно командой dd, я использую USB-FDD дисковод.

sudo dd if=fdd.img of=/dev/sdk status=progress

И, да! Эта система успешно работает на реальном железе. В данном случае проверка идёт на 386 компьютере.

❯ Выводы

Сборка MS-DOS 4.0 Гаджеты, Электроника, Программирование, Разработка, Программа, Техника, Timeweb, DOS, Длиннопост

Запуск свежесобранного MS-DOS 4.0 на реальном железе

Не буду лукавить, сборка MS-DOS 4.0 оказалась не столь простой. Пришлось посмотреть некоторые видео, пошерстить различные репозитории. Но всё же это прекрасный опыт, который позволяет заглянуть внутрь исторических исходников и покопаться в них.

Давняя утечка MS-DOS 6.0 была неполной, и собрать его не представлялось возможным. А теперь у исследователей есть готовый инструментарий, для того чтобы попрактиковаться в разработки каких-то своих модулей старой операционной системы.

Конечно же, я по-настоящему жду, когда же обнародуют исходники MS-DOS 6.22, так как ещё надеюсь увидеть их на своём веку.

Удачи вам в ваших экспериментах!

❯ Полезные ссылки:

  1. Исходные коды MS-DOS от Microsoft

  2. Пример сборки MS-DOS 4.0 во FreeDOS (видео)

  3. Compiling MS-DOS 4.0 from DOS 4.0, on a PS/2!



  • Написано специально для Timeweb Cloud и читателей Пикабу. Подписывайтесь на наш блог, чтобы не пропустить новые интересные статьи.

  • Облачные сервисы Timeweb Cloud — это реферальная ссылка, которая может помочь поддержать наши проекты.

Показать полностью 9

Играем в крестики-нолики c RPN калькулятором

Автор текста: dlinyj


Играем в крестики-нолики c RPN калькулятором Калькулятор, Программирование, СССР, Timeweb, Электроника, Познавательно, Игры, Крестики-нолики, Гаджеты, Длиннопост

Когда я разбирался с программируемыми калькуляторами, то думал, как бы элегантнее протестировать функциональность устройства. Один из известных способов проверки – это реализация какой-либо игры.

Игр для калькуляторов, как на просторах бывшего СССР, так и за рубежом громадное количество, остаётся только выбрать. Наиболее популярная — это «Посадка на Луну». Однако, для меня она показалась скучной и неинтересной, а сам код сложным и запутанным. Поэтому мой выбор пал на крестики-нолики, так как все мы играли в них в школе, и мне стало интересно сыграть в неё с калькулятором.

Реализовать игру решил на модели HP-32S, поскольку он мне очень полюбился за красоту архитектурной реализации и удобство программирования.

❯ Основа программы


В предыдущей своей статье "Калькуляторы с обратной польской нотацией" я делал обзор литературы для программируемых калькуляторов. Среди которой была замечательная книга А.Г. Гайшут "Калькулятор твой помощник и соперник в играх".

В этой книге приводится огромное количество примеров игр на калькуляторе и, в частности, пример игры в крестики-нолики:

Играем в крестики-нолики c RPN калькулятором Калькулятор, Программирование, СССР, Timeweb, Электроника, Познавательно, Игры, Крестики-нолики, Гаджеты, Длиннопост

Мне не удалось найти описания логики работы этих игр, а автор книги, к сожалению, умер в 2015 году. Попытка искать ответ в публикациях автора, любезно предоставленных на его личном сайте, не увенчалась успехом.

Поэтому придётся разбираться с этой программой самостоятельно. Приведу текст и описание программы из книги под спойлером:

Описание программы Крестики-нолики из книги:

Играем в крестики-нолики c RPN калькулятором Калькулятор, Программирование, СССР, Timeweb, Электроника, Познавательно, Игры, Крестики-нолики, Гаджеты, Длиннопост
Играем в крестики-нолики c RPN калькулятором Калькулятор, Программирование, СССР, Timeweb, Электроника, Познавательно, Игры, Крестики-нолики, Гаджеты, Длиннопост

Главная задача – это перенос этого кода с МК-61 на калькулятор HP-32S. Для начала, разберёмся как эта программа работает.

❯ Проверка программы на МК-61


Первое, что я сделал – это перенабрал код из книги в формате, который понимает онлайн-эмулятор МК-61.

Играем в крестики-нолики c RPN калькулятором Калькулятор, Программирование, СССР, Timeweb, Электроника, Познавательно, Игры, Крестики-нолики, Гаджеты, Длиннопост

Кстати, если интересно, то можно попробовать поиграть в эмуляторе, чтобы понять принцип работы. Для этого копируем код, вставляем в область «Код программы:» и нажимаем кнопку «Ввести в память». Картинка из книжки выше подсказывает нам, что калькулятор даёт координаты, куда ставить "X", а мы ему в ответ передаём координаты, куда ставить "O".

Играем в крестики-нолики c RPN калькулятором Калькулятор, Программирование, СССР, Timeweb, Электроника, Познавательно, Игры, Крестики-нолики, Гаджеты, Длиннопост

Координаты для игры

Чтобы начать играть на клавиатуре калькулятора, нужно нажать кнопку [С/П]. В ответ будет выведено число, первое число всегда «9» (центр поля). В ответ необходимо ввести свою координату, например, «2» и нажать [С/П]. И так далее, пока вы не проиграете (калькулятор выведет «77», либо будет ничья (калькулятор выведет «0»).

Играем в крестики-нолики c RPN калькулятором Калькулятор, Программирование, СССР, Timeweb, Электроника, Познавательно, Игры, Крестики-нолики, Гаджеты, Длиннопост

Калькулятор победил

Чтобы посмотреть последний ход калькулятора, надо обменять регистры X и Y местами, для этого нужно нажать на клавишу [⟷].

Проверка показала, что всё прекрасно работает как в эмуляторе, так и на живом калькуляторе, и ошибок в программе нет.

❯ Анализ кода программы для калькулятора МК-61


Для понимания работы программы, я переписал её на python. Конечно, даже при переносе на привычный язык программирования, код будет выглядеть немного диковато, поскольку реализовывался на совершенно иных принципах, но он хотя бы будет читаемым для остальных пользователей.

Особенность программирования МК-61 в том, что он пропускает команду перехода, если условие истинно, и исполняет — если ложно! Поэтому все условия для python пришлось инвертировать. Плюс, я для удобства ввёл дополнительные функции, которые также перенёс впоследствии в HP-32S: функция вывода координат крестиков и ввода ноликов, функция ничья и победа калькулятора:

Играем в крестики-нолики c RPN калькулятором Калькулятор, Программирование, СССР, Timeweb, Электроника, Познавательно, Игры, Крестики-нолики, Гаджеты, Длиннопост

Первое – инициализирую регистры калькулятора:

Играем в крестики-нолики c RPN калькулятором Калькулятор, Программирование, СССР, Timeweb, Электроника, Познавательно, Игры, Крестики-нолики, Гаджеты, Длиннопост

После всех подпрограмм идёт головная программа:

Играем в крестики-нолики c RPN калькулятором Калькулятор, Программирование, СССР, Timeweb, Электроника, Познавательно, Игры, Крестики-нолики, Гаджеты, Длиннопост

Можно увидеть, что в любом случае в самом начале крестик будет стоять на координате 9. Вся основная логика сокрыта в подпрограмме.

Играем в крестики-нолики c RPN калькулятором Калькулятор, Программирование, СССР, Timeweb, Электроника, Познавательно, Игры, Крестики-нолики, Гаджеты, Длиннопост

Из всего кода я понял, что второй ход калькулятора будет на единицу меньше оппонента, а если ход был в координату «1», то равен восьми. Но вот что делает остальная логика программы, особенно зачем там тригонометрическая функция, для меня осталось загадкой. Буду рад читателям, если кто-то сможет прояснить, как же работает эта программа.

Исходный код доступен в репозитории проекта.

И, да, код вполне себе работоспособен, в чём несложно убедиться:

Играем в крестики-нолики c RPN калькулятором Калькулятор, Программирование, СССР, Timeweb, Электроника, Познавательно, Игры, Крестики-нолики, Гаджеты, Длиннопост

❯ Перенос кода на HP-32S

Напомню, что калькулятор HP-32S, который есть у меня, принадлежит семейству калькуляторов HP10B/14B/17B/17BII/19BII/20S/21S/22S/27S/28S/32S/32SII/42S, таким образом, всё, что приводится ниже, с небольшими адаптациями можно будет перенести и на другие модели этой серии.

Трудозатраты в предыдущей главе, по переносу кода на python, были проделаны с двумя целями:

  1. Понять, как же работает этот код (увы, не выполнено).

  2. Более удобно переносить на другую модель калькулятора.

Этакая программная блок-схема, которая позволяет понять, какие регистры нужны, какие переходы и прочее.

Вооружившисьдокументацией на калькулятор HP-32S, я переписал программу крестиков-ноликов с питона для него. Для удобства я делал это в таблицах Exel. Как я уже говорил, особенность калькулятора в том, что он маркирует каждую строку буквой и цифрой, а любая метка – это смена буквы. Таблицы идеально подходят для этого.

Ниже под спойлером, приведён код программы. Если вы хоть немного знаете ассемблер и какой-то другой язык программирования, хоть тот же BASIC, то без труда сможете понять, что же там происходит.

Код программы для калькулятора HP-32S:

Играем в крестики-нолики c RPN калькулятором Калькулятор, Программирование, СССР, Timeweb, Электроника, Познавательно, Игры, Крестики-нолики, Гаджеты, Длиннопост
Играем в крестики-нолики c RPN калькулятором Калькулятор, Программирование, СССР, Timeweb, Электроника, Познавательно, Игры, Крестики-нолики, Гаджеты, Длиннопост

В силу того, что на калькуляторе HP-32S можно сделать вывод на экран конкретного регистра (с указанием имени регистра), а также запрос ввода другого конкретного регистра, то ввод-вывод становится чуть более интерактивным и интересным.

Лучше один раз увидеть, чем тысячу раз прочитать.

❯ Выводы


Изначально задача казалась мне такой простой, но заняла у меня достаточно приличное время. Её ценность состояла в том, что мне удалось разобраться — как же программировать для калькулятора HP-32S. В результате оказалось, что из модельного ряда калькуляторов, с которыми я занимался — эта версия оказалась самая дружелюбная и удобная.

Другой задачей, которую я хотел решить — это разобраться, каким образом изобретались подобные программы для микрокалькуляторов. Из-за того, что у калькулятора ограничена память программ, производилась какая-то дичайшая оптимизация, поэтому она выглядит так запутанно. Но, к моему сожалению, ни толковой литературы, ни описания, как это делалось, мне не удалось найти.

Поэтому, если у вас, уважаемые читатели, есть идеи о том, как же работает программа крестики-нолики (можно анализировать код python), то я с удовольствием их выслушаю.

❯ Полезные ссылки:

  1. Гитхаб этого проекта

  2. Первая часть «Калькуляторы с обратной польской нотацией»

  3. Сайта автора «Гайштут и его друзья»

  4. Онлайн-эмулятор МК-61

  5. Документация на калькулятор HP-32S


Если вам интересна металлообработка, старое железо, всякие DIY штуки, погроммирование и linux, то вы можете следить за мной ещё в телеграмме.


  • Написано специально для Timeweb Cloud и читателей Пикабу. Подписывайтесь на наш блог, чтобы не пропустить новые интересные статьи.

  • Облачные сервисы Timeweb Cloud — это реферальная ссылка, которая может помочь поддержать наши проекты.

Показать полностью 13

Оживляем неизвестный дисплей от японского поезда/автобуса

Как-то раз, очередным томным субботним вечером, я в очередной раз листал от нефиг делать Yahoo! Auctions — одну из крупнейших японских сетевых барахолок. Внезапно, среди рекомендуемых лотов появился вот такой внушительных размеров электровакуумный дисплей:

Оживляем неизвестный дисплей от японского поезда/автобуса Гаджеты, Электроника, Техника, Timeweb, Ретро, Сборка, Видео, YouTube, Длиннопост

Однако, рулить дисплеем, как правило, та ещё задача. «Особенно если динамическая индикация, да ну его, влом!» — подумал было я. Но у того же продавца обнаружилась и, судя по всему, управляющая плата:

Оживляем неизвестный дисплей от японского поезда/автобуса Гаджеты, Электроника, Техника, Timeweb, Ретро, Сборка, Видео, YouTube, Длиннопост

На фотографии виднеется 8085 процессор, 8251 UART и ПЗУшка — казалось бы, дизассемблируй себе, разбирай протокол, да просто с ардуины выводи что угодно. Да ещё и за одну йену, это прям даром! После этого я решил всё же попытать удачу и выхватить этот дисплей. Тем более, что давно уже хотелось какие-нибудь красивые часики в комнату...

Конечно же, какая-то зараза попыталась из-под меня эти лоты перехватить, но в итоге за примерно десять тысяч йен весь комплект достался мне.

❯ Всё уже поломано до нас


Через пару-тройку дней приходит посылка. Продавец, конечно, пожалел упаковки, и поэтому плата и дисплей просто болтались в коробке — но, к счастью, всё выглядело целым.

Оживляем неизвестный дисплей от японского поезда/автобуса Гаджеты, Электроника, Техника, Timeweb, Ретро, Сборка, Видео, YouTube, Длиннопост

Да, я в курсе, что полярность на коннекторе питания подписана задом наперёд %)

Первым же делом снимаю ПЗУ, кидаю в MSX, чтобы вычитать на комп, но увы — кроме нулей ничего не вычитывается, да ещё и греется оно очень подозрительно. При подаче питания сама плата тоже ничего не делает.

На шине процессора никакой активности нет, хотя тактовый сигнал в норме — то бишь, если бы даже ПЗУ и было целым, читать из него процессор не пытается. Плата ещё и закатана в какой-то лак, который не плавится и не растворяется, поэтому чинить такое будет то ещё «удовольствие». Даже масочные ПЗУ со шрифтами нормально не вытащить…

Гуглёж по маркировке (Morio Denki 6M06056) тоже ничего, кроме сайта производителя, не выявил. Судя по всему, они занимаются дисплеями для транспорта — так что, скорее всего, этот стоял в каком-то автобусе или поезде.

Вероятнее всего, это был автобус — ведь в поездах между станциями, как правило, на экране идёт бегущая строка. В старых автобусах же отображается лишь название следующей остановки. Выгоревший текст — 「次は、(неразборчиво)」(«Следующая: (нрзб.)») подтверждает эту догадку.

❯ Плата драйвера панели


Значит, придётся рулить панелью напрямую — благо, какая-то плата, адаптирующая его к какой-то шине, к дисплею уже прилагается.

Оживляем неизвестный дисплей от японского поезда/автобуса Гаджеты, Электроника, Техника, Timeweb, Ретро, Сборка, Видео, YouTube, Длиннопост

А ведь в наше время вся эта требуха поместится в дешёвую ПЛИСку размером с ноготь…

Судя по наличию микросхемы ОЗУ (MN2114), плата представляет себе какой-то простенький фреймбуфер. Отлично, значит с динамической индикацией на 100+ катодов уже разобрались до меня :-)

Справа снизу находится трапециевидный «молекс», знакомый нам по старым жёстким дискам. Линия 5 вольт и общий провод совпадают по распиновке — отлично, значит запитать попробуем от обычного компьютерного источника питания.

Пара минут с тестером и карандашом — и вот уже отчётливо видно, где на разъёме шины данных входы, а где выходы.

Верхний ряд группами по 4 пина соединён со входом коммутатора 74LS257 — скорее всего, это вход данных шириной в 1 байт. Нижний ряд же идёт на инвертеры, выполняющие роль буферов — так хотя бы можно понять, что в нём есть 5 входных сигналов, и 2 выходных.

Быстренько раскидываем на огрызке старой макетки штуковину, чтобы накручивать произвольные значения на восьмибитном входе данных и перемычками дёргать остальные, а на светодиодах смотреть выходные сигналы.

Оживляем неизвестный дисплей от японского поезда/автобуса Гаджеты, Электроника, Техника, Timeweb, Ретро, Сборка, Видео, YouTube, Длиннопост

Крутилки шестнадцатеричные дома были в избытке, а вот джамперы пришлось импровизировать паяльником на ходу

Ничтоже сумняшеся, я подключаю старый блок питания от компьютера к молексу на плате… И конечно же дисплей всё так же мёртв. Никакой реакции ни на входные данные, ни на закорачивание шины данных у чипа памяти на землю.

❯ Конструкция дисплея


Почему-то всё это время мне думалось, что это — ВЛИ, которому нужно около 20-30 вольт для свечения. Однако при прозвонке самой лампы тестером никакие пины между собой соединены не были — в случае ВЛИ так быть не может, ведь ему нужен накал катода. Ну, разве что, если нить накала перегорела…

Впрочем, пристальный взгляд на дисплей под лупой показал, что ни накала, ни сеток — типичных для люминисцентных индикаторов компонентов — там и вовсе нет:

Оживляем неизвестный дисплей от японского поезда/автобуса Гаджеты, Электроника, Техника, Timeweb, Ретро, Сборка, Видео, YouTube, Длиннопост

Значит, скорее всего, это газоразрядный индикатор! По горизонтали у него расположены платы с кучей группированных транзисторов. По маркировке «L-S» никакие транзисторы в справочниках подходящих лет, увы, не находятся.

Оживляем неизвестный дисплей от японского поезда/автобуса Гаджеты, Электроника, Техника, Timeweb, Ретро, Сборка, Видео, YouTube, Длиннопост

По бокам у дисплея — практически одинаковые платы с диодами, логическим инвертером (7414) и неизвестным модулем Mitsubishi MA7446-01.

Оживляем неизвестный дисплей от японского поезда/автобуса Гаджеты, Электроника, Техника, Timeweb, Ретро, Сборка, Видео, YouTube, Длиннопост

Собираем мозги в кучу и пытаемся понять, что делать дальше:

  • Поперёк «12-вольтовой» линии питания стоит конденсатор на 250 вольт — значит, как минимум, там должно быть высокое постоянное напряжение. Очевидно, положительное, если этот конденсатор проектировщики не вставили туда в роли петарды.

  • На плате мультиплексора между питанием и выходом на дисплей есть цепь с транзистором 2SC1473 — он тоже рассчитан на 250 вольт.


Значит, скорее всего, на молексе вместо 12 вольт ожидается, как минимум, под сотню с лишним, а значит и индикатору для поджига нужно напряжение где-то такого порядка.

В итоге из загашников извлекается маленький инвертер для электролюминисцентных проводов, к нему приделывается диодный мост, и вуаля — у нас есть кривой маломощный источник 160 вольт постоянки.

Припаиваем к одному из горизонтально стоящих пинов минусовой выход через резистор на пару килоом, а плюсовым аккуратненько одной рукой ведём по вертикально-стоящим…


Ура, значит сам дисплей, как минимум, жив! Можно заказывать повышающий модуль на амазоне, а пока он едет — заняться восстановлением платы мультиплексирования.

Конечно, можно было бы сделать целиком свою, и управлять аж субпикселями, как на видео. Но динамическая индикация на сотню с гаком катодов — это то ещё развлечение, поэтому мне проще было оставить всё как есть.

❯ Диагностика платы мультиплексора


Под такое дело для проекта был куплен аж целый китайский лабораторник на амазоне — и подключение платы к нему показало, что жрёт она как не в себя! Почти что целый ампер, на конструкцию из 38 корпусов. Для логики серии 74LS это уж слишком много. Получается, в плате управления тоже что-то не так.

Оживляем неизвестный дисплей от японского поезда/автобуса Гаджеты, Электроника, Техника, Timeweb, Ретро, Сборка, Видео, YouTube, Длиннопост

Так как компаратора навроде HP 10529A у меня нет, пришлось вооружиться осциллографом и таблицами истинности из даташитов.

На шине данных у ОЗУ хоть и завалены фронты, но в принципе всё смотрится не так и плохо:

Оживляем неизвестный дисплей от японского поезда/автобуса Гаджеты, Электроника, Техника, Timeweb, Ретро, Сборка, Видео, YouTube, Длиннопост

А вот на прочих чипах местами встречается откровенная дичь — например, сигналы, у которых логический ноль где-то на 1,8 вольтах, а единица на 3,5.

В двоичной логике бывает True, бывает False, но встречается и «Да нет наверное»:

Оживляем неизвестный дисплей от японского поезда/автобуса Гаджеты, Электроника, Техника, Timeweb, Ретро, Сборка, Видео, YouTube, Длиннопост

Местами и вообще какие-то непонятные лесенки, которых явно в цифровой схеме быть не должно. Ниже троичная логика, прямиком из семидесятых:

Оживляем неизвестный дисплей от японского поезда/автобуса Гаджеты, Электроника, Техника, Timeweb, Ретро, Сборка, Видео, YouTube, Длиннопост

Видимо, собирали девайс на 74 логике из альтернативной вселенной.

Оживляем неизвестный дисплей от японского поезда/автобуса Гаджеты, Электроника, Техника, Timeweb, Ретро, Сборка, Видео, YouTube, Длиннопост

По итогам пары дней такого копательства, вкупе с тыканием термопарой по всей плате даже туда, где солнечный свет не бывал, обнаружились следующие виновники:

  • 107-1 (JK-триггер) — кипятится (60+°C) сразу при включении питания, выход закорочен на вход

  • 107-2 — от выхода на вход 1кОм, в первом триггере выходной сигнал просажен (ну ещё бы), а второй вообще выдаёт не то, что в даташите, а погоду на Марсе. До кучи ещё и греется под 40 градусов.

  • 107-3 — 2кОм со входа на выход, теплее всего остального.

  • 393-1, 393-2 (сдвоенные 4-битные счётчики) — между тактовым входом и Vcc всего лишь 2 кОм, поэтому и сигналы выглядят странно.


До кучи, у сбоивших микросхем пин Gnd явно отличался по внешнему виду — припой был как будто потемневшим, и его там было больше, чем на остальных пинах в том же ряду/столбце.

Возможно, после пробоя там прошёл достаточный ток, чтобы расплавить припой и собрать его в такие горки?

Оживляем неизвестный дисплей от японского поезда/автобуса Гаджеты, Электроника, Техника, Timeweb, Ретро, Сборка, Видео, YouTube, Длиннопост

В любом случае, другие чипы с таким же симптомом было тоже решено поменять на всякий случай.

Радиомагазинов в городе уже толком не осталось — поэтому берём вкусняшки, паяльник, и едем к товарищу хабарить полный комплект логики из ведра старых плат.

Оживляем неизвестный дисплей от японского поезда/автобуса Гаджеты, Электроника, Техника, Timeweb, Ретро, Сборка, Видео, YouTube, Длиннопост

В четыре руки и два паяльника чипы хабарятся куда быстрее, чем просто в четыре руки

JK-триггеры оказались настолько сложной в применении штукой, что ими, видимо, никто пользоваться и не захотел — поэтому пришлось докупать их отдельно в интересном магазине, по сей день торгующем теми ещё музейными экспонатами.

❯ Повторный запуск


Выпаиваем всех подозрительных и заменяем их на панельки — ну вдруг опять вылетит, не паять же по новой :-)

Оживляем неизвестный дисплей от японского поезда/автобуса Гаджеты, Электроника, Техника, Timeweb, Ретро, Сборка, Видео, YouTube, Длиннопост

Фото уже более позднее — заменил ещё и кварц, чтобы увеличить частоту развёртки, дабы экран не полосил на видео

Подаём питание. Один из светодиодов на макетке, раньше постоянно горевший, на сей раз гаснет — это хороший знак. Ставим крутилки в положение 0xFF, от балды трогаем один из джамперов, и…

Оживляем неизвестный дисплей от японского поезда/автобуса Гаджеты, Электроника, Техника, Timeweb, Ретро, Сборка, Видео, YouTube, Длиннопост

Две негорящие строки — это от макетки один из проводов шины данных отвалился при проверке :-)

Оно живое!!! И жрёт со всеми включёнными пикселями аж 25 ватт.

Экспериментально подбираем распиновку коннектора:

Оживляем неизвестный дисплей от японского поезда/автобуса Гаджеты, Электроника, Техника, Timeweb, Ретро, Сборка, Видео, YouTube, Длиннопост

Способ управления тоже оказался весьма простым и понятным.

После подачи питания нужно дождаться, пока ~READY не уйдёт в лог. 0. Затем выставляем биты данных и дёргаем ~CLOCK. Этот байт попадёт в верхнюю половину самого левого столбца — пиксели, выставленные в «1», загорятся, а в «0», соответственно, погаснут.

Следующий импульс на ~CLOCK запишет байт в нижнюю половину самого левого столбца, потом — верхнюю половину второго столбца, и так далее — сверху вниз, слева направо. После записи последнего байта (нижняя половина самого правого столбца), следующий байт опять попадёт в верхнюю половину самого левого, т.е. запись идёт в цикле.

Если мы хотим начать рисовать с начала, можно дёрнуть ~RETZ — это обнулит счётчик, и рисование опять начнётся с самого левого столбца. Можно сбросить вообще всё и очистить экран при помощи ~RESET.

Притянув BRIGHT к земле можно уменьшить яркость (и потребляемую мощность) дисплея вдвое. Притянув же к земле SHOW, можно отключить отображение на дисплее вообще, при этом рисовать в память платы всё так же возможно.

❯ Проба пера


Так как терпения у меня в организме ещё меньше, чем дофамина, то была распотрошена ещё какая-то плата из мусорки. Оттуда были извлечены TC4050B — буферы, которые отлично подойдут для согласования 3.3-вольтовой ESP32 с 5-вольтовой логикой на дисплее.

Оживляем неизвестный дисплей от японского поезда/автобуса Гаджеты, Электроника, Техника, Timeweb, Ретро, Сборка, Видео, YouTube, Длиннопост

Переходник с 1980 года на 2016

Оживляем неизвестный дисплей от японского поезда/автобуса Гаджеты, Электроника, Техника, Timeweb, Ретро, Сборка, Видео, YouTube, Длиннопост

На JLCPCB я всё ещё не зарегистрировался...

Схема в этот раз даже не рисовалась, всё соединялось сразу из головы. Пишем простенькую процедуру, двигающую бит в слове туда-сюда, заливаем скетч, и любуемся:


Дописываем ещё простенький рендер шрифтов, обновляем скетч:


Ну а дальше едем в Акихабару закупаться требухой для развития проекта до какого-то полезного состояния :-)

Оживляем неизвестный дисплей от японского поезда/автобуса Гаджеты, Электроника, Техника, Timeweb, Ретро, Сборка, Видео, YouTube, Длиннопост

Котлета в комплект радиодеталей не входит!

Опытный читатель уже догадался по содержимому этого хабара из Акихабары, что дисплею уготована типичная радиолюбительская участь — стать будильником-метеостанцией %)

Операционная система же обрела рабочее название Plasma Information System OS — или, если коротко, PIS-OS.

Оживляем неизвестный дисплей от японского поезда/автобуса Гаджеты, Электроника, Техника, Timeweb, Ретро, Сборка, Видео, YouTube, Длиннопост

Смотрится итоговый результат, как по мне, восхитительно:

Но о сборке девайса и написании прошивки — уже в следующей части :-)

В реалтайме за обновлениями, среди тонны фоток еды и Мику, вы можете также следить в моём телеграме.

Также, можно посмотреть ход описанного в статье «в реалтайме», прочитав тему на EEVBlog.


  • Написано специально для Timeweb Cloud и читателей Пикабу. Подписывайтесь на наш блог, чтобы не пропустить новые интересные материалы.

  • Облачные сервисы Timeweb Cloud — это реферальная ссылка, которая может помочь поддержать наши проекты.

Показать полностью 21 3

Тюнинг старого тетриса

Тюнинг старого тетриса Тетрис, Электроника, Гаджеты, Timeweb, Техника, Длиннопост, Telegram (ссылка), Видео, YouTube

Недавно я прикупил себе старенький и оригинальный — «тот самый» тетрис, а дальше меня затянуло. Собственно, нормальная ситуация. Однако, мне пришлось столкнуться с одной неприятной проблемой: если во время игры — скорость (ака сложность) повышается выше двух пунктов, то играть становится совершенно невозможно, а скоростей-то много…

Понятно, что идёт какая-то ошибка в подборе частоты задающего генератора в контроллере тетриса, и это даже слышно на слух, так как мелодия играет уж больно быстро. Потому, мне пришла в голову мысль, а возможно ли как-то внести аппаратные изменения в устройство, так чтобы понизить частоту контроллера для корректной игры? Сам спросил — сам ответил.

Мне хотелось сделать фичу, навроде решения, как на стародавних компьютерах, у которых была кнопочка "Turbo", которая, несмотря на своё название, снижала частоту процессора. И таки да! Не буду вас томить — эта затея мне удалась, и на выходе получился весьма забавный и простой — аппаратный тюнинг тетриса.

❯ Суть проблемы


Вдохновлённый статьями Azya о реверсе тетриса, я прикупил себе точно такой же аппарат, фигурировавший в его публикациях. И обнаружил, что частота работы встроенного микроконтроллера сильно завышена.

В играх типа Brick Game, в народе известных как тетрис, не всегда корректно выставлен задающий генератор, в результате, при увеличении скорости выше второй, играть становится просто невозможно.И это явно бага, которую проще всего проиллюстрировать на видео:


Вот я, взрослый человек, и не смог пройти игру на третьей скорости, а что уж говорить о детях? Плюс, мне было дико интересно узнать, что будет, если пройти игру на максимальной скорости: покажут ли мультфильм в конце? При достижении определённого количества очков скорость растёт, а что произойдёт при взятии последней скорости?

Ну что же, настало время RTFM на процессор HT443A0.

❯ Приступим!


Из статей «Так какой же процессор использовался в играх Brick Game?» часть 1 и часть 2 мы узнаем, что конкретно в этой модели тетриса установлен четырёхбитный микроконтроллер HT443A0. И если обратиться к документации, то можно выяснить, что частота процессора задаётся резистором.

Ниже привожу схему из документации на этот контроллер, которая попутно является просто принципиальной электрической схемой тетриса:

Тюнинг старого тетриса Тетрис, Электроника, Гаджеты, Timeweb, Техника, Длиннопост, Telegram (ссылка), Видео, YouTube

Но, как обычно бывает, нигде не сказано, какой номинал резистора отвечает за определённую частоту. Единственное, что мы знаем, в каких пределах его можно изменять (от 36 кОм до 620 кОм). Это значит, что настало время весёлых опытов.

Напомню, что микросхема представляет собой каплю смолы на печатной плате. Таким образом, распиновка чипа нам недоступна, но логика подсказывает, что резисторов на плате будет не так уж и много.

Если вскрыть корпус этого устройства, то можно увидеть следующую картину:

Тюнинг старого тетриса Тетрис, Электроника, Гаджеты, Timeweb, Техника, Длиннопост, Telegram (ссылка), Видео, YouTube

В моём устройстве вместо пьезо пищалки, стоит магнитный динамик и небольшая схема усиления на одном транзисторе. Резистор снизу на фотографии нужен для схемы усиления. А вот резистор сверху – это явно сопротивление задающей частоты. Измеряем его сопротивление и получаем около 15 кОм.

Тюнинг старого тетриса Тетрис, Электроника, Гаджеты, Timeweb, Техника, Длиннопост, Telegram (ссылка), Видео, YouTube

Внимание вопрос: если мы уменьшим сопротивление – частота вырастет или уменьшится? Да, зная RC-цепочки понятно, что при уменьшении сопротивления частота будет расти, но нужно в этом убедится. Да и сверху напаять резистор проще, чем делать последовательное соединение.

Увеличиваем частоту


Подбираю номинал резистора в 15 кОм и припаиваю его в параллель к основному, тем самым уменьшая сопротивление ровно в половину.

Тюнинг старого тетриса Тетрис, Электроника, Гаджеты, Timeweb, Техника, Длиннопост, Telegram (ссылка), Видео, YouTube

И, вы знаете, факир был пьян, и фокус не удался, это сработало. Конечно, я хотел уменьшить скорость работы тетриса, а в результате ускорил его. Тем не менее это вполне себе рабочее решение.


Интересно теперь уменьшить частоту тетриса.

Уменьшение частоты


Попробую теперь уменьшить частоту в два раза. Для этого я просто подпаял резистор последовательно с основным, тем самым изменив сопротивление до 30 кОм.

Тюнинг старого тетриса Тетрис, Электроника, Гаджеты, Timeweb, Техника, Длиннопост, Telegram (ссылка), Видео, YouTube

И это оказалось тем самым сопротивлением, на котором тетрис играет адекватно, с той скоростью, которой должен.


Круто, теперь можно уже завинчивать и играть, но мне хотелось большего.

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

❯ Добавляем регулятор частоты


Тут никаких высоких материй нету, просто заменяем постоянный резистор на переменный, найденный где-то в хозяйстве. И даже весьма удобно вывести проводочки из корпуса через батарейный отсек.

Тюнинг старого тетриса Тетрис, Электроника, Гаджеты, Timeweb, Техника, Длиннопост, Telegram (ссылка), Видео, YouTube

Крутилка

После сборки можно приступить к натурным испытаниям.


Как видно, всё отлично работает и можно в любой момент выставить комфортную частоту работы. Единственное, если тетрис вдруг зависнет при таких операциях, перегрузить его получится, только отключив питающие батареи.

❯ Выводы

Да — частоту работы микроконтроллера можно менять прямо на ходу. А вот насчёт мультика — сохраню интригу, пускай кто-то сам пройдёт, и проверит можно ли посмотреть его :)

Честно говоря, мне тоже хотелось приобщиться к этому движу вокруг реверса Brick Game. Даже немного поколдовал с транслятором ассемблера и некоторыми другими вещами. Но то времени, то вдохновения не хватает, то просто экосистемы таких же фанатиков. Поэтому для начала решил для себя сделать что-то простое и понятное.

Из забавного: понял, что можно сделать некий DJ тетрис пульт, видео с которым — успешно завирусилось у меня в шортсах:

❯ Полезные ссылки:

  1. Процессор, который использовался в «Тетрисе»: на каких SoC работала недорогая микроэлектроника в 90-х?

  2. Так какой же процессор использовался в играх Brick Game?

  3. Так какой же процессор использовался в играх Brick Game? Часть 2

  4. Документация на микроконтроллер HT443A0

Если вам интересна металлообработка, старое железо, всякие DIY штуки, погроммирование и linux, то вы можете следить за мной ещё в телеграмме.


  • Написано специально для Timeweb Cloud и читателей Пикабу. Подписывайтесь на наш блог, чтобы не пропустить новые интересные материалы.

  • Облачные сервисы Timeweb Cloud — это реферальная ссылка, которая может помочь поддержать наши проекты.

Показать полностью 6 5
Отличная работа, все прочитано!