Визуализаторы воздушного трафика переживают небольшой ренессанс: их собирают на микроконтроллерах, выводят на CRT-мониторы и даже проецируют на потолок. Теперь очередь дошла и до NES — восьмибитной консоли Nintendo, знакомой в СНГ прежде всего по её клонам. Проект NES Radar от разработчика под ником k6lcm выложен на GitHub под лицензией GPL, и, вопреки названию, никакого радара в нём нет: ни радиоприёмника, ни пеленгации, ни дальнометрии. Есть только картридж и аккуратно собранный кабель.

Приставка NES с картриджем NES Radar и самодельным кабелем

Именно это и делает проект интересным. Картридж здесь самый обычный, с ПЗУ, в котором лежит программа: ни спрятанного ESP32, ни платы на RP2040 внутри нет, хотя первая догадка при взгляде на такую самоделку обычно именно такая. Тем не менее, если вставить картридж, включить приставку и ввести код аэропорта по классификации Международной организации гражданской авиации (ИКАО) — например, KATL, — на экране появится схема окрестного воздушного движения.

Экран NES с отметками самолётов, похожий на игру восьмидесятыхВыглядит как игра тех лет, но это сегодняшний воздушный трафик.

реклама кормит Уточку 🦆

Секрет во втором порту джойстика

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

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

реклама кормит Уточку 🦆

Откуда выросла идея

NES Radar — развитие более раннего проекта того же автора, c64u-radar, устроенного по такому же принципу с Python-сервером. Разница в транспорте: у Commodore 64 Ultimate есть собственный сетевой порт, через который данные и передавались напрямую. У NES ничего похожего нет — ни LAN, ни штатного последовательного интерфейса, — поэтому единственным разумным каналом остался порт второго геймпада. Приём не новый: похожим образом на NES в своё время выводили данные слежения за спутниками.

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

реклама кормит Уточку 🦆

Почему на экране всего восемь самолётов

Если ввести код KATL, весь трафик увидеть не получится: программа ограничена восемью спрайтами, а Хартсфилд-Джексон в Атланте — самый загруженный аэропорт мира. Ограничение упирается в саму архитектуру консоли: графический процессор NES физически не может вывести больше восьми спрайтов на одной строке развёртки, и превышение лимита приводит к мерцанию объектов. Поэтому картинка получается не полной сводкой, а выборкой ближайших бортов — что для декоративного «радара» на телевизоре вполне достаточно.

Возможность подобных проектов вообще появилась благодаря ADS-B: самолёты сами регулярно передают в эфир свой идентификатор, координаты, высоту и скорость, а сообщества энтузиастов уже много лет собирают эти данные приёмниками на базе дешёвых SDR-свистков и раздают их через открытые API. Именно поэтому авиатрекеры сегодня встречаются в самых неожиданных форматах, от настоящих радарных ЭЛТ-экранов до проекции на потолок спальни.

Практической ценности у NES Radar немного, и автор на неё не претендует. Ценность здесь в другом: проект показывает, что даже наглухо закрытая консоль 1983 года остаётся открытой платформой, если внимательно посмотреть на её разъёмы. Исходный код доступен на GitHub, лицензия GPL позволяет свободно его изучать и дорабатывать, так что портировать идею на другую ретро-платформу теперь заметно проще.