Горячее
Лучшее
Свежее
Подписки
Сообщества
Блоги
Эксперты
Войти
Забыли пароль?
или продолжите с
Создать аккаунт
Регистрируясь, я даю согласие на обработку данных и условия почтовых рассылок.
или
Восстановление пароля
Восстановление пароля
Получить код в Telegram
Войти с Яндекс ID Войти через VK ID
ПромокодыРаботаКурсыРекламаИгрыПополнение Steam
Пикабу Игры +1000 бесплатных онлайн игр Поднимайтесь как можно выше по дереву, собирайте цветы и дарите их близким.
Вас ждут уникальные награды и 22 выгодных промокода!

Пикаджамп

Аркады, Казуальные, На ловкость

Играть

Топ прошлой недели

  • AlexKud AlexKud 35 постов
  • Animalrescueed Animalrescueed 52 поста
  • Webstrannik1 Webstrannik1 50 постов
Посмотреть весь топ

Лучшие посты недели

Рассылка Пикабу: отправляем самые рейтинговые материалы за 7 дней 🔥

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

Спасибо, что подписались!
Пожалуйста, проверьте почту 😊

Помощь Кодекс Пикабу Команда Пикабу Моб. приложение
Правила соцсети О рекомендациях О компании
Промокоды Биг Гик Промокоды Lamoda Промокоды МВидео Промокоды Яндекс Маркет Промокоды Пятерочка Промокоды Aroma Butik Промокоды Яндекс Путешествия Постила Футбол сегодня
0 просмотренных постов скрыто
8
theseedoflove
theseedoflove
11 дней назад
ВПитере

Ответ на пост «Просто хочу поделиться фотографией, которую у себя нашел а архиве»⁠⁠783

BMW

BMW

Вспомним Mainka

Вспомним Mainka

Показать полностью 25
Волна постов Мемы Гифка Ответ на пост Длиннопост
0
26
Runoi
Runoi
11 дней назад
My Little Pony

Uh-huh⁠⁠

Источник

My Little Pony Nightmare Moon Nnaly Гифка Длиннопост
4
5
TrezvyiBlog
TrezvyiBlog
11 дней назад
Поиск по описанию

Откуда эти кадры??? Помоги, сила Пикабу!⁠⁠

Подскажите, откуда эта гифка? Из какого-то фильма, сериала, передачи, блога? Кто эта девушка и над чем она так смеется?

Без рейтинга Поиск Гифка с предысторией Помогите найти Просьба Гифка
10
354
Tertiusfilius
Tertiusfilius
11 дней назад

Земля налетит на небесную ось⁠⁠

Нижнетагильский журналист предлагает землякам готовить убежища на случай "нападения" межзвездной кометы 3I/ATLAS и прочая лабуда

Обычно не комментирую новости, но тут прямо не устоял. Я люблю астрономию, поэтому слежу за новостями о третьем в истории наблюдаемом межзвездном объекте, 3I/ATLAS. Это главная астрономическая сенсация 2025 года, обнаруженная 2 июля. Объект движется выше третьей космической скорости (около 60 км/сек), значит он

Объект действительно интересный. Кроме того, что это всего лишь третий наблюдаемый объект не из нашей системы, есть гипотеза, что комета из древних частей нашей галактики и может иметь возраст свыше 7 млрд лет, что древнее нашего Солнца и Земли почти в два раза. Еще у кометы необычный состав, в том смысле, что те же вещества, что и в других кометах, например углекислый газ, вода и циан, но в необычном соотношении.

Но объект является кометой естественного происхождения, со всем кометным поведением. Пруфы ниже.

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

При этом журналисты ссылаются на неких "авторитетных астрономов", а когда им задают неприличные вопросы о фамилиях, то они приводят в пример Ави Лоуба, кроме того, Ави Лоуба, и еще Ави Лоуба.

Сей персонаж, действительно, астрофизик, правда специальность у него вовсе не наблюдательная астрономия. Он уже прославился тем, что приписывал искусственное происхождение первому засеченному объекту, Оумуамуа. И вот опять он это говорит, на этот раз о 3I/ATLAS. За это он был жестко раскритикован научным сообществом. Примеры критики от тру-ученых, с опровержением аргументов Лоуба.

https://xras.ru/project_diary.html?post_id=3001

Ссылка

Ссылка

Ссылка

https://tass.ru/kosmos/24695977

Да и сам Лоуб особенно не настаивает:

«Да, скорее всего, 3I/ATLAS — обычная комета, но если есть хотя бы небольшой шанс на другое, мы должны рассмотреть и его».

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

Согласно изображениям, полученных с космических зондов, 3I/ATLAS — гигантский цилиндрический объект, покрытый никелем.

Видите цилиндрический объект? И я нет, а он есть.

Весь "Покрытый никелем", абсолютно весь образовалось из новости, что комета испускает пары никеля.

И все такое прочее. Некоторые СМИ приводят гипотезу просто как любопытную, некоторые пускаются в теории заговора с обязательным "власти скрывают", а тагильский журналист решил не мелочиться и дать землякам советы, как вести себя при инопланетном десанте:

Как себя вести людям в случае, если угроза окажется реальной?

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

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

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

В общем, граждане, без паники. На самом деле, комета пройдет офигенно далеко от Земли:

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

Здесь можно посмотреть прямо в динамике, как пройдет комета:

https://cloud.mail.ru/public/2QQa/L5jdt5zwg

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

Еще немного ссылок:

Ссылко

https://www.astronet.ru/db/msg/1968724

Показать полностью 2
[моё] Космос Комета Журналисты НЛО Солнечная система Инопланетяне Длиннопост Гифка
52
984
monobogdan
monobogdan
Посты о ремонте и моддинге ретрогаджетов.
TECHNO BROTHER
11 дней назад

Я купил игровую консоль и написал для неё BIOS⁠⁠2

Осторожно: Статья написана максимально простым языком. Так что если вы гик, но не умеете программировать - вам всё равно будет интересно!

Недавно я наткнулся на DIY-игровую консоль за 1.500 рублей - Waveshare GamePi13. Когда гаджет приехал ко мне, я запустил примеры игр от производителя... и оторопел от 5 FPS в Pong - это ж как плохо нужно код писать!

Не желая мириться с этим, я открыл схему устройства, даташит на RP2040 и принялся писать свой собственный BIOS. Если вам интересно узнать, как работают DIY-консоли «изнутри», можно ли запускать внешние программы на микроконтроллерах из RAM, как реализованы различные подсистемы BIOS, а в конце даже написать «Змейку» - добро пожаловать под кат!

❯ Предисловие

Иногда китайские производители выпускают на рынок дешевые гаджеты с ориентиром исключительно на гиков. Чего-уж говорить, с какой-нибудь R36s чего только не сделали: и кастомные прошивки, и порты игр с ПК, и даже достаточно сложные аппаратные модификации. Однако в тусовке DIY'щиков обычно всё куда хардкорнее...

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

Самые известные консоли такого формата — это нашумевший Playdate и чуть менее известный Arduboy. Обе консоли сильно ограничены в характеристиках и это подстегивает интерес гиков к постоянной оптимизации кода и попыткам впихнуть «невпихуемое». Выделился даже российский «Микрон», представив свою DIY-консоль «для хардкорных ардуинщиков» — некий MikBoy на базе своего же МИК32 «Амур»!

Я уверен что Микроновцы будут читать эту статью... Если вдруг всё получится и MikBoy пойдёт в серию — то напишите мне пожалуйста сообщение :)

Я уверен что Микроновцы будут читать эту статью... Если вдруг всё получится и MikBoy пойдёт в серию — то напишите мне пожалуйста сообщение :)

Подобным «ардуинщиком» являюсь и я. Ещё со школьных лет меня нереально тянет к микроконтроллерам и Embedded-электронике в целом. О консоли собственной разработки я мечтаю с 14 лет, при этом мне не просто хочется собрать прототип и «забить», но и запустить мелкосерийное ручное производство и продавать устройства подписчикам! К своим 24-годам я сделал два прототипа и развел три платы, но все эти проекты так или иначе откладывались в долгий ящик...

Один из ранних-ранних прототипов, предназначенный для обкатки драйвера дисплея.

Один из ранних-ранних прототипов, предназначенный для обкатки драйвера дисплея.

И вот, 25 сентября мне стукнуло 24 годика. Уже взрослый мальчик получил в качестве подарка донат от постоянного читателя и пошёл изучать маркетплейсы в поисках интересного железа. По ключевым словам «tft lcd diy» был найден «ESP32 Bitcoin Miner V2» (выгодный девкит с 2.8" и ESP32-S2), девкит ESP32 с 4.3" дисплеем и емкостным тачскрином, а также некий Waveshare GamePi13, о котором мы сегодня с вами и поговорим!

Отдельное спасибо хотелось бы сказать тем самым подписчикам. Без вашей поддержки этой статьи бы не было!

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

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

В тот же день я заказал устройство, и уже через 3 недели трепетного ожидания, GamePi13 оказался у меня на столе. На первый взгляд консоль показалась очень маленькой: её 1.3" дисплей был даже меньше, чем у Nokia 6230i, а кнопки оказались расположены непривычно близко друг к другу. Ко всему прочему, у консоли не было предусмотрено вообще никакого корпуса: ни «болванки» от производителя, ни STL-файлов для печати. Что-ж, это только придаёт брутальности нашему устройству!

Оба устройства помещаются в одну ладошку... А ведь когда-то 6230i казался реально большим!

Оба устройства помещаются в одну ладошку... А ведь когда-то 6230i казался реально большим!

Как вы уже могли заметить, консоль состоит из двух независимых модулей: платы разработки Waveshare RP2040-PiZero и «бутербродного» геймпада с дисплеем, который подключается к гребёнке основной платы. В этом и кроется главный секрет устройства: геймпад изначально рассчитан именно для «одноплатников» Raspberry Pi, но поскольку Waveshare также выпускает плату RP2040 с Pi-совместимой гребёнкой, они решили заодно адаптировать его и для PiZero.

❯ Что внутри?

Хоть PiZero и похожа на референсную плату в лице Raspberry Pi Pico, у неё есть несколько серьёзных отличий:

  • Во первых, на плате установлена SPI-флэшка объёмом аж в 16МБ. Это максимальный объём, который поддерживает XIP-контроллер в RP2040. В RPi Pico же используется флэш-память объёмом всего в 2МБ.

  • Далее внимание привлекает использование менее эффективного ULDO RT9193 вместо полноценного DC-DC преобразователя в оригинальном Pico. Сам микроконтроллер сможет работать при разрядке аккумулятора ниже 3.6В, а вот периферия — под вопросом. Иными словами, мы не сможем использовать «все соки» из аккумулятора и нам придётся реализовывать отсечку по напряжению.

  • На плате распаяна микросхема-чарджер литий-ионных аккумуляторов ETA6096 с током зарядки аж в 1А. Если захотите использовать аккумулятор меньшей емкости — стоит подобрать резистор ISET большего номинала, иначе есть риск перегрева.

  • Из разъёмов распаян HDMI (да, я тоже в шоке), слот для MicroSD (под него отдали весь SPI0) и два Type-C: один для аппаратного USB-контроллера в RP2040, второй для USB через PIO. В общем, пытались угодить всем.

Плата с геймпадом не менее интересная. С фронтальной стороны у нас расположилось 10 кнопок и 1.3" IPS-дисплей с разрешением 240x240, использующий контроллер ST7789. Вообще, для такой диагонали разрешение дисплея крайне избыточно: оно не только съедает драгоценные килобайты оперативной памяти для фреймбуфера, но и значительно грузит DMA-контроллер и всю шину SPI. Я бы на месте инженеров установил бы сюда «золотой стандарт» — недорогой 1.8" 128x160. Все кнопки подключены к отдельным пинам без сдвигового регистра и занимают значительную часть доступных GPIO.

Я бы сделал лучше!

Я бы сделал лучше!

С обратной стороны расположился небольшой динамик, усилитель, построенный на базе NS8002, 3.5мм джек для подключения наушников, а также токоограничивающий резистор подсветки и обвязка для дисплея. Подсветка подключена напрямую к VSYS и рассчитана на питание от 3.3В, так что никакой регулировки яркости и продвинутых режимов сна!

Производитель платы — компания SpotPear.

Производитель платы — компания SpotPear.

Ну что-ж, собираем наш бутерброд обратно, подключаем Type-C и смотрим на одну из представленных демо-игр — Тетрис!

Нет, это не пережатая гифка, игра действительно идёт буквально в 1 FPS и с мерцанием — и это на микроконтроллере с ядром Cortex-M0+ на частоте аж в 150МГц! Я напомню, что N-Gage с процессором TI OMAP на более старом ядре ARM926EJ-S с частотой 104МГц умудрялся тянуть первый Tomb Raider с полностью программным рендерингом в 25 FPS!!!

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

class hardware():
def init():
spi0=SPI(1,baudrate=900000000, phase=0, polarity=0,
sck=Pin(game_kit.lcd_sck, Pin.OUT),
mosi=Pin(game_kit.lcd_sda, Pin.OUT))
display = st7789.ST7789(spi0, 240, 240,
reset=Pin(game_kit.lcd_rst, Pin.OUT),
dc=Pin(game_kit.lcd_dc, Pin.OUT),cs=Pin(game_kit.lcd_cs, Pin.OUT),
xstart=0, ystart=0, rotation=0)
# 初始界面,提示游戏开始
display.fill(st7789.BLACK)
display.text(font2, "Pong!", 90, 90)
display.text(font2, "Let's go!", 60, 140)
time.sleep(1)

hardware.display = display


class pong():
def __init__(self):
# bgm
self.bgm = p_music(p_music.song2, tempo=1, duty=500, pins=[
Pin(game_kit.buzzer, Pin.OUT)])
# 控制音乐暂停和播放的键start
self.key_start = button(game_kit.key_start, self.key_start_callback)

# led
self.led = Pin(game_kit.led_sta, Pin.OUT)

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

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

def blit_buffer(self, buffer, x, y, width, height):
"""
Copy buffer to display at the given location.

Args:
buffer (bytes): Data to copy to display
x (int): Top left corner x coordinate
Y (int): Top left corner y coordinate
width (int): Width
height (int): Height
"""
self.set_window(x, y, x + width - 1, y + height - 1)
self.write(None, buffer)

Звуковая подсистема, состоящая из одноканальной тональной пищалки на аппаратном ШИМ-контроллере, тоже была со своими «приколами». Например «тишина» — это 0, то есть магнит всегда прижат к нижней части, хотя должно быть PWM_MAX / 2.

Под впечатлением от такого кода, я решил попробовать написать SDK для этой консоли сам. Однако моё видение идеальной DIY-консоли сильно отличалось от того-же Arduboy или Playdate!

❯ Архитектура

При проработке архитектуры будущего «BIOS», я сразу же поставил для себя несколько чётких задач:

  • Во первых, BIOS должен быть достаточно абстрактным для того, чтобы скрывать от игры детали реализации конкретного «железа». Иными словами, игра оперирует не DMA-контроллерами, FPU-сопроцессором и SPI, а набором простых и понятных подсистем: графика, ввод, звук, хранилище. Кроме того, это позволяет легко портировать игры для такого BIOS'а на другие платформы: можно без проблем реализовать симулятор (не эмулятор!) консоли на ПК или портировать её на ESP32 с минимальными изменениями.

  • Во вторых, мы ставим производительность в основной приоритет при разработке устройства. В конце-концов это же позорище, что простейшая игра тормозит и мерцает на мощном микроконтроллере, но при этом тетрисы с трёхмерной графикой вполне шустро работали на телефонах Sony Ericsson 2005 года. Именно поэтому для написания игр используются не скриптовые языки по типу Lua или JS, а самый обычный «C с классами».

  • В третьих, сам BIOS должен быть легко портируем между разными платами (у SpotPear есть вторая похожая плата — уже с 1.5" и стиком) и даже аппаратными платформами. Этот проект может стать основной прошивкой для консоли уже моей разработки и иметь вот такую «кроссплатформу» было бы отнюдь не лишним!

Руководствуясь критериями выше, я решил писать BIOS на C++ (на деле C с классами) с активным использованием интерфейсов и VMT. Это позволяет не только удобно структурировать модули и повышает читаемость кода игры, но и избавляет от необходимости вручную составлять таблицу системных вызовов к API. Тем не менее, в таком подходе есть один серьёзный нюанс: когда у подсистем появляются новые методы или добавляются перегрузки к прошлым, их необходимо по порядку добавлять в конец интерфейса, иначе VMT ломается.

vtable for CTest:
.word 0
.word typeinfo for CTest
.word CTest::Test()
.word CTest::Abc()
vtable for ITest:
.word 0
.word typeinfo for ITest
.word __cxa_pure_virtual
.word __cxa_pure_virtual

В своё время Microsoft решила эту проблему в COM с помощью QueryInterface и миллиона вариаций этих самых интерфейсов: IDirectSound8, IDirectDraw7 и т.д, но мы можем не изобретать велосипед, а просто предоставлять «старым» играм такие же «старые» версии VMT.

Основным объектом в BIOS'е является CSystem, который содержит в себе ссылки на другие подсистемы консоли, а также на информацию о текущей аппаратной платформе:

/// @brief Primary system service, supplied to both games and system modules.
class ISystem
{
public:
virtual CSystemInfo* GetSystemInfo() = 0;

virtual void* Alloc(uint32_t size) = 0;
virtual void Free(void* ptr) = 0;

virtual IGraphicsService* GetGraphicsService() = 0;
virtual IInputService* GetInputService() = 0;
virtual IDebugService* GetDebugService() = 0;
};

Несмотря на кажущуюся «динамическую» натуру системы, никаких IID я переизобретать не стал. BIOS должен реализовывать ровно тот минимальный функционал системы, который нужен. Экземпляр CSystem создаётся так называемым «портом» на конкретную плату, который должен заполнить структуру с указателями на реализации подсистем — прямо как machine-файлы в Linux! И RAII не нарушили, и полный контроль без костылей сохранили — ляпота!

void InitializePlatform()
{
CommManager = new CCommunicationManager();
CDebugService* dbgSvc = new CDebugService();

/* Print some userful debug information */
CJEDECFlashID* flashId = FlashManager.GetFlashID();

dbgSvc->Print("Initializing platform");
dbgSvc->Print("Flash memory manufacturer: 0x%x, capacity: %dKb", flashId->Manufacturer, flashId->Capacity / 1024);
dbgSvc->Print("CID: %d", FlashManager.GetCID());
dbgSvc->Print("First available: %d", FlashManager.GetFirstUserSector());

/* Service initialization */
InputService = new CInputService(dbgSvc);
GraphicsService = new CGraphicsService(dbgSvc);

/* Platform description info */
PlatformInfo.DebugService = dbgSvc;
PlatformInfo.GraphicsService = GraphicsService;
PlatformInfo.InputService = InputService;

System = new CSystem(&PlatformInfo);
}

int main() {
InitializePlatform();

while (true) {
/* Tick all platform-depend services here */
CommManager->Tick();
PowerStateManager.Tick();
InputService->Tick();

System->Tick();
}
}

В целом, базовая архитектура примитивная и понятная. Перейдем же к деталям реализации конкретных модулей.

❯ Графика

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

struct CFrameBufferInfo
{
uint16_t Width;
uint16_t Height;
CColor* Pointer;
uint32_t Size;
};

class IDrawingSurface : public ISystemService
{
public:
virtual void Clear(CColor color) = 0;
virtual void DrawBitmap(CBitmap* bitmap, int x, int y) = 0;
virtual void DrawBitmapEx(CBitmap* bitmap, int x, int y, CSpriteInfo* spriteInfo) = 0;
virtual void DrawRect(CColor color, int x, int y, int width, int height) = 0;
virtual void FillRect(CColor color, int x, int y, int width, int height) = 0;
virtual void DrawLine(CColor color, int x1, int y1, int x2, int y2) = 0;
virtual void DrawString(CColor color, int x, int y, CAnsiChar* str) = 0;
};

class IGraphicsService : public ISystemService
{
public:
virtual void SetPowerState(bool isPowerEnabled) = 0;
virtual void SetBacklightState(bool isBacklightEnabled) = 0;
/* Maybe some controller-related functions in future? Like BIAS and HW rotation? */

virtual CFrameBufferInfo* GetFrameBufferInfo() = 0;
virtual IDrawingSurface* GetDrawingSurface() = 0;
virtual void Flush() = 0;
};

Сам драйвер дисплея классический: в его задачи входит инициализация контроллера, выделение памяти под фреймбуфер и регулярное обновление изображения на матрице. Поскольку в таких устройствах используются стандартные MIPI DBI экраны с набором команд DCS, часть кода инициализации и работы с дисплеем стало возможным унифицировать:

/* Perform hardware reset */
gpio_put(PIN_LCD_RST, 0);
sleep_ms(DISPLAY_INIT_SLEEP_TIME);
gpio_put(PIN_LCD_RST, 1);
sleep_ms(DISPLAY_INIT_SLEEP_TIME); /* Wait for display controller to complete initialization */

Reset(); /* Perform software reset to maintain default register state */
SendCommand(cmdSLPOUT, 0, 0); /* Disable sleep mode */
SendCommand(cmdCOLMOD, 0x05); /* Set color format and decoding*/
SendCommand(cmdINVON, 0, 0); /* Disable inversion */
SendCommand(cmdNORON, 0, 0); /* Enable normal mode */
SendCommand(cmdMADCTL, cmdMADCTL_RGB); /* Set pixel size */

uint8_t windowSize[] = { 0 >> 8, 0, DISPLAY_WIDTH >> 8, DISPLAY_WIDTH }; /* Set display window (note this is not safe for displays with sides not equal in size) */
SendCommand(cmdCASET, windowSize, 4);
SendCommand(cmdRASET, windowSize, 4);

SetPowerState(true); /* Enable display */

Вероятно читатель может спросить: «зачем выделять целых 115КБ под фреймбуфер, если можно использовать команды CASET/RASET и рисовать отдельные спрайты прямо в память дисплея?». Дело в том, что в таком случае скорость отрисовки будет падать обратно пропорционально размеру и числу рисуемых изображений. Если мы попытаемся нарисовать параллакс-фон, состоящий из трёх картинок с размерами 240x240, то нашим узким местом станет не только цена обращения к XIP-кэшу, но и производительность SPI-контроллера (который напрямую тактируется от системного PLL) и мы получим те самые 1-2 FPS. Кроме того мы потеряем возможность использования DMA и нам придётся ждать каждой транзакции на экран: это проблема многих «самодельных» консолей, которую, впрочем, можно решить обратившись к опыту предков — а именно PPU.

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

/* Setup DMA for SPI */
dmaChannel = dma_claim_unused_channel(true);

dmaConfig = dma_channel_get_default_config(dmaChannel);
channel_config_set_transfer_data_size(&dmaConfig, DMA_SIZE_8);
channel_config_set_dreq(&dmaConfig, spi_get_dreq(spi1, true));
channel_config_set_read_increment(&dmaConfig, true);
channel_config_set_write_increment(&dmaConfig, false);

...

if(!dma_channel_is_busy(dmaChannel))
{
uint8_t cmdByte = cmdRAMWR;
gpio_put(PIN_LCD_CS, 0);
gpio_put(PIN_LCD_DC, 0);
spi_write_blocking(spi1, &cmdByte, 1);

gpio_put(PIN_LCD_DC, 1);
dma_channel_configure(dmaChannel, &dmaConfig, &spi_get_hw(spi1)->dr, frameBufferInfo.Pointer, frameBufferInfo.Size, true);
}

Далее переходим к фактической отрисовке изображений. На данный момент поддерживается только один формат пикселей — RGB565, поскольку нет особого смысла использовать 8-битную палитру для изображений 32x32 (но есть смысл использовать 4х-битную, как на NES). Процесс рисования называется блиттингом и поскольку реализация полноценного альфа-блендинга слишком дорогая для реалтайм графики на микроконтроллерах, для описания прозрачности используется техника колоркеев.

Взято с <a href="https://pikabu.ru/story/ya_kupil_igrovuyu_konsol_i_napisal_dlya_neyo_bios_13327291?u=https%3A%2F%2Fru.pinterest.com%2Fpin%2F663506957573347585%2F&t=pinterest&h=b409d0ad71297189d8f711597c010a1f143b8fba" title="https://ru.pinterest.com/pin/663506957573347585/" target="_blank" rel="nofollow noopener">pinterest</a>

Взято с pinterest

ColorKey — это как ChromaKey, но для описания прозрачного цвета используется только базовый цвет, а не цвет + порог допустимых цветов. Помните как в играх 90-х были картинки с розовым фоном цвета Magenta? Вот это оно самое :)

for(int i = 0; i < min(y + bitmap->Height, frameBufferInfo->Height) - y; i++)
{
CColor* bitmapScanline = &bitmap->Pointer[i * bitmap->Width];
CColor* scanline = &frameBufferInfo->Pointer[(y + i) * frameBufferInfo->Width + x];

for(int j = 0; j < min(x + bitmap->Width, frameBufferInfo->Width) - x; j++)
{
uint16_t sample = *bitmapScanline;

if(sample != bitmap->ColorKey)
*scanline = sample;

scanline++;
bitmapScanline++;
}
}

Рисование текста реализовано знакомым для Embedded-инженеров способом: шрифты описываются в формате 8x8, где 8 битов каждого байта обозначают наличие или отсутствие пикселя в текущей позиции. Такие шрифты не только занимают очень мало места, но их также очень легко и быстро рисовать, а также масштабировать под различные разрешения экранов. На данный момент я задумываюсь — стоит ли добавлять в консоль поддержку полноценного UTF-16, если учесть что основной таргет на русскоязычную аудиторию, где и CP866 хватает с головой?

Какой же дисплей чёткий...

Какой же дисплей чёткий...

❯ Ввод

Далее мы плавно переходим к реализации драйвера ввода. Как я уже говорил выше, все кнопки подключены к своим отдельным GPIO без использования сдвигового регистра или I/O Expander'а, что с одной стороны и хорошо (некоторые китайские производители реализовывают консоли с кнопками, основанными на матричном (!!!) принципе), а с другой — отъедает большинство GPIO у RP2040. Свободными пинами мы могли бы выполнять множество полезной работы: получать уровень заряда аккумулятора у Fuel Gauge, управлять уровнем подсветки с помощью ШИМ-контроллера и ключа, или, в конце-концов, сделать порт для подключения периферии... но нет так нет.

Сам по себе драйвер ввода до жути примитивный: он позволяет получить состояние отдельных кнопок, осей (как Input.GetAxis в Unity) и проверить, нажата ли хоть какая-то кнопка:

class IInputService : public ISystemService
{
public:
virtual EKeyState GetKeyState(EKeyCode keyCode) = 0;
virtual int GetAxis(EInputAxis axis) = 0;
virtual bool IsAnyKeyPressed() = 0;
};

Для удобства и портабельности BIOS'а между платами, кнопки геймпада маппятся к соответствующим GPIO в отдельной таблице трансляции, которая также содержит состояния этих самых кнопок:

// Should be layouted in order of EKeyCode enum
CButtonState ButtonMapping[] = {
{
PIN_KEY_LEFT
},
{
PIN_KEY_RIGHT
},
{
PIN_KEY_UP
},
{
PIN_KEY_DOWN
},
{
PIN_KEY_A
},
{
PIN_KEY_B
},
{
PIN_KEY_X
},
{
PIN_KEY_Y
},
{
PIN_KEY_LEFT_TRIGGER
},
{
PIN_KEY_RIGHT_TRIGGER
}
};

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

void CInputService::Tick()
{
timeStamp = get_absolute_time();

for(int i = 0; i < ButtonMappingCount; i++)
{
CButtonState* buttonState = &ButtonMapping[i];
bool gpioState = !gpio_get(buttonState->GPIO); // Buttons are pull-up to high when not pressed

// Check if there was elapsed enough time
if(timeStamp > buttonState->LastStateChange)
{
if(buttonState->State == EKeyState::ksReleased)
buttonState->State = EKeyState::ksIdle;

if(buttonState->State == EKeyState::ksIdle && gpioState)
buttonState->State = EKeyState::ksPressed;

if(buttonState->State == EKeyState::ksPressed && !gpioState)
buttonState->State = EKeyState::ksReleased;

buttonState->LastStateChange = timeStamp + KEY_DEBOUNCE_THRESHOLD;
}
}
}

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

EKeyState CInputService::GetKeyState(EKeyCode keyCode)
{
uint32_t code = (uint32_t)keyCode;

if(keyCode >= ButtonMappingCount)
return EKeyState::ksIdle; /* Maybe we should throw an exception? */

return ButtonMapping[code].State;
}

int CInputService::GetAxis(EInputAxis axis)
{
EKeyCode a = EKeyCode::keyLeft;
EKeyCode b = EKeyCode::keyRight;

if(axis == EInputAxis::inputAxisVertical)
{
a = EKeyCode::keyUp;
b = EKeyCode::keyDown;
}

return GetKeyState(a) == EKeyState::ksPressed ? -1 : (GetKeyState(b) == EKeyState::ksPressed ? 1 : 0);
}

А вот и результат:

❯ Запуск программ

Вот мы и подошли к, возможно, самой интересной подсистеме в нашем BIOS'е. Думаю многие читатели так или иначе интересовались тем, как же компилятор и линкер превращают исходный код и объектный файлы в пригодные для выполнения программы и библиотеки. Вопрос запуска нативных программ на микроконтроллерах интересовал и меня — я даже написал целых три статьи об этом: в первой мы поговорили о ESP32 и Xtensa, а во второй реализовали BinLoader путём реверс-инжиниринга и хакинга кнопочного телефона, а в третьей сделали полу-универсальный ElfLoader для нескольких моделей телефонов на разных платформах.

Но начнём мы с простого. Каждая программа делится на три основных секции:

  • .text — содержит в себе машинный код функций и так называемые Literal pools. Может быть как в ROM, так и в RAM. На системах, где есть возможность выполнять код и в ROM, и в RAM, есть отдельная секция - .iram.

  • .data — содержит инициализированные переменные, которые обычно попадают в оперативную память. Для статических констант есть отдельная секция, называемая .rodata.

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

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

В моём случае, я решил загружать игры в SRAM и дабы не реализовывать нормальный динамический линкер и релокации, решил выделить под игру фиксированный кусочек оперативной памяти объёмом в 128КБ. Для этого я отредактировал скрипт линкера Pico C SDK так, чтобы сразу после вектора прерываний шла наша программа:

. = ALIGN(4);

.ram_vector_table (NOLOAD): {
*(.ram_vector_table)
} > RAM

iram_program_reserve_size = 128K;

.iram_program (NOLOAD) : {
. = ALIGN(4);
PROVIDE(iram_program_origin = .);
. += iram_program_reserve_size;
} > RAM

.uninitialized_data (NOLOAD): {
. = ALIGN(4);
*(.uninitialized_data*)
} > RAM

Для компиляции программы также используется кастомный скрипт для линкера и особый Makefile, где после сборки программы мы копируем все её секции в выходной файл в «сыром» виде. Поскольку программа собирается под выполнение из конкретного адреса — пока речь идёт о переносимости только между одной аппаратной платформой. На RP2040, RP2350 и возможно STM32 такое «прокатит», но вот на других ARM-процессорах — большой вопрос!

OUTPUT_FORMAT("elf32-littlearm")


SECTIONS
{
. = 0x200000c0;

.program_info : {
*(.program_info*)
}

.text : {
*(.vtable*)
*(.text*)
*(.rodata*)
*(.data*)
*(.bss*)
}

/DISCARD/ : {
*(.ARM.*)
*(.comment*)

}
}

Каждое приложение, как и базовая система, предполагает использование ООП и поэтому представляет из себя реализацию класса IApplication. Для этого нам нужна некоторая runtime-поддержка: аллокатор, функция для создания экземпляра приложения, а также указатель на ISystem. Именно поэтому каждая программа должна экспортировать специальный заголовок, где содержится указатель на функцию-инициализатор:

#define PROGRAM_HEADER 0x1337
#define PROGRAM_INFO(name, clazz) int test; CAllocator* __Allocator; IApplication* __createInstance(CAllocator* allocator, ISystem* systemPtr) { __Allocator = allocator; return new clazz(systemPtr); } \
CProgramInfo __program_info __attribute__ ((section(".program_info"))) = { PROGRAM_HEADER, BIOS_VERSION, name, &__createInstance };

struct CProgramInfo
{
uint32_t Header;
uint32_t BIOSVersion;
CAnsiChar Name[32];

CreateApplicationInstanceFunction CreateApplicationInstance;
};

...

PROGRAM_INFO("Blink", CBlinkApplication)

Таким образом, для выполнения нашей программы и вызова её обработчиков событий нам достаточно лишь загрузить файл по адресу 0x200000c0 и создать экземпляр IApplication. Всё очень просто и понятно!

CAllocator allocator;
allocator.Alloc = malloc;
allocator.Free = free;

IApplication* app = ((CProgramInfo*)ptr)->CreateApplicationInstance(&allocator, System);

Но "моргалка" ведь слишком просто, согласитесь? Поэтому мы с вами напишем ремейк классической игры Змейка, которая работает в настоящие 60 FPS!

❯ Заключение

Вот таким нехитрым образом я понемногу реализовываю свою мечту детства: «андерграунд" консоль собственной разработки. Конечно здесь ещё много чего нужно доделывать перед тем, как начинать разводить свою плату, но начало ведь положено! В контексте GamePi13, я считаю что моя реализация SDK для консоли всё таки немного лучше, чем то, что предлагает производитель «из коробки».

Я понимаю что мой не совсем трушный эмбеддерский подход может вызвать разные ощущения у читателей: так что приглашаю всех заинтересованных в комментарии, обсудим с вами «сломанный Branch-prediction из-за виртуалов», «UB из-за того, что порядок указателей на реализации в VMT может отличаться» и «какого фига игры у тебя оказались в SRAM, а высокопроизводительный код на Flash, если у XIP кэш всего в 16КБ!».

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

Если вам понравилась статья...

И у вас появилось желание что-то мне задонатить (например прикольный гаджет) - пишите мне в телегу или в комментариях :) Без вашей помощи статьи бы не выходили! А ещё у меня есть Boosty.

Что думаете о таком формате статей?
Всего голосов:
Если бы я собрался с духом и произвел 20-50 штучек консолей-самоделок с полностью готовым SDK, примерами и туториалами, купили бы себе такую
Всего голосов:
Что думаете о таком проекте?
Всего голосов:

Подготовлено при поддержке @Timeweb.Cloud

Показать полностью 18 3
[моё] Опрос Покупка Гаджеты Нужно ваше мнение Консоли Игры Своими руками Arduino Инженерия Программирование C++ Arm Raspberry Pi Гифка Длиннопост
75
10
ModernHorror
ModernHorror
11 дней назад
Лига Геймеров
Серия Подборки игр

Игры в постсоветском сеттинге. Четвёртая подборка⁠⁠

Вспомним ещё 10 проектов про наши родные постсоветские края. 15 стран, когда-то бывшие одним великим союзов, сегодня объединённые лишь аббревиатурой СНГ. Плюс конкретно в этой подборке будет несколько проектов про вымышленные страны.

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

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

Важно - тут не будет игр про постапокалипсис и проектов про СССР. Про это были или будут отдельные подборки.

Также, если вы не нашли какую-то явно подходящую по тематике игру, она могла быть в прошлых подборках или будет в будущих (материал ещё есть как минимум на три). Но всё равно пишите свои варианты.

VLADiK BRUTAL

Жанр - Шутер
Год - 2024
Платформа - ПК
Разработчик - Narko Games (Россия)
Издатель - Narko Game

Коротко игру можно описать словами "Русский Half-Life", причём тут смешана и первая часть, и вторая.

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

Самое смешное, что в Half-Life 2, вдохновившей Владика, итак был постсоветский сеттинг. Дизайнер Виктор Антонов (к сожалению недавно нас покинувший) вдохновлялся странами СНГ и бывшего ВД. А вот автор нашего Брутала получается на постСССР накрутил ещё и ВСЖ-эстетику, понасовав ёвезде милицейские УАЗики, шашлычные и отсылки на "Брата".

А по геймплею это чистой воды...ну, вы понели. Движок тут Unreal Engine 4, но автор старательно маскирует его под Source, передав даже фирменную физику и управление. Оттуда же головоломки, структура уровней, даже местные силовики явно косплеят гражданскую оборону из вдохновителя. И всё это играется нормально. Да, есть кривые моменты в геймплее и геймдизайне, баги и недоработки, но по большей части сделано это дело качественно, хоть иногда и дёшево. Только будьте готовы к своеобразному чувству юмора создателя.

Дом Русалок (Dom Rusalok)

Жанр - Квест
Год - 2021
Платформа - ПК
Разработчик - Яков Бутузов (Россия)
Издатель - Яков Бутузов

Кратко описать атмосферу игры можно цитатой из песни рэпера Horus "Дом тысячи сквозников":

"От домашних проблем уходя во дворы,
Где никому никого не жалко.
Старшие братья — в горячих точках.
По телику — политики в горящих шапках.


Так что вспоминать тут про детство?
Такое оно — коридорно-подъездное.
Не то чтоб особо гордимся,
Но как-то особо не брезгуем…"

Только добавьте сюда мистики.

Если кратко, то это "Очень странные дела", но будто бы от Балабанова. Сам создатель так и описывал свой проект. Если не кратко, то это классический квест в стилистике пиксель-арта, действие которого происходит в 1996 году в российской глубинке.

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

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

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

Но очень важно, что упор тут сделан не на геймплей и даже не на сюжет. Он сделан на ностальгию. Не по эпохе, она была настоящим адом, тут скорее ностальгия по детству и воспоминаниям о нём. Плакаты со Шварценеггером на стенах, пейджеры, кассетные плееры, VHS-магнитофоны, клюква в сахаре, молоко в треугольных упаковках. Тут очень много антуражного инвентаря. Более того: думаете автор просто нарисовал атмосферные задники? Нет, он брал фотографии тех времён и прогонял через пиксельный фильтр. Передачи по телевизору тоже взяты из тех времён. Ну по музыку и говорить нечего. В общем, 30-летним детям понравится.

Заря (в разработке)

Жанр - Автосимулятор
Год - ещё не вышла
Платформа - ПК
Разработчик - SBSR (Россия)
Издатель - SBSR

Трешак был, чернуха была, давайте отвлечёмся на что-то позитивное. "Заря", это находящийся в разработке (на момент написания статьи) симулятор водителя. Сельского водителя.

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

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

Republic: The Revolution

Жанр - Стратегия
Год - 2003
Платформа - ПК
Разработчик - Elixir Studios (Великобритания)
Издатель - Eidos Interactive

Политический симулятор про руководство оппозицией.

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

Игровой процесс включает в себя вербовку сторонников и совершение всяческих действий против режима, а также сюжет. Да, он тут есть. И, кстати, если вы провели какие-то параллели (постсоветская страна с диктатором у власти, коррупция и т.д.), то вы полностью правы. Авторы действительно вдохновлялись беспределом в одной стране СНГ. Украиной. Это они сами говорили. Сейчас-то понятно, про неё либо хорошо, либо никак. Ну ещё на сюжет частично повлияла обстановка в Беларуси и Азербайджане.

Панельки / Doomer

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

Doomer

Doomer

Ну как игры. Doomer так назвать тяжело, это скорее медитативная штука, где можно грустить и философствовать. Геймплей? Его нет. Просто ходите, вертите предметы в руках, взаимодействуете с окружением. Это буквально то, что вы можете делать и у себя дома, встав с дивана, но видимо интереснее в "игре". В любом случае это лучше, чем дилогия ШХД, где интерактива ещё меньше, плюс "действие" происходит где-то в девяностых-нулевых, так что можно немного понастальгировать.

Panelki

Panelki

А вот у "Панелек" в плане игрового процесса всё намного лучше. Здесь можно...чистить снег. Ну и всё. Это симулятор работника ЖКХ. На самом деле есть и другие активности - отмывать стены от граффити, убирать подъезды, можно лепить снеговиков и даже строить снежные крепости. А в DLC (да, тут есть DLC!) даже появилась подработка курьером. Это же русский Death Stranding! Мало? А как вам кооператив? Он тут есть. К тому же мир (включая подъезды) генерируется процедурно, поэтому два прохождения не будут похожи друг на друга. Да да, прохождения - тут есть сюжет: главный герой хочет заработать 50 тысяч и улететь домой.

The Last Visit: 98th

Жанр - хоррор
Год - 2025
Платформа - ПК
Разработчик - Aktamia Games, oBabyx (США (?))
Издатель - Aktamia Games, oBabyx

Ещё один хоррор, но уже вынесен отдельно. Он просто сделан лучше остальных и поэтому заслуживает отдельного внимания, хоть и проходится за 1-1,5 часа.

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

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

Korpus: Buried over the Black Soil

Жанр - Хоррор
Год - 2020
Платформа - ПК
Разработчик - Korpus (Украина)
Издатель - Korpus

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

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

Игра выполнена в пиксельной ретро-стилистике. И это не оправдание плохой графики, она тут довольно качественная, вдохновленная первой частью Alone in the Dark. А стилистика, бестиарий и сеттинг основаны на украинской мифологии (действие, кстати, происходит в Украине 1990-х). Русского тут нет, но, что самое смешное, украинского тоже.

Fuck You Witch

Жанр - Хоррор
Год - 2024
Платформа - ПК
Разработчик - Beshbarmak games (Казахстан)
Издатель - Beshbarmak games

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

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

Но не смотрите на сюжет, он тут для галочки. Главное, это сама подача сюжета. Во первых, тут реально нужно крыть ведьму матом. Прямо брать микрофон и кричать туда оскорбления. Во вторых главный герой постоянно ломает четвёртую стену: прямо голосом подсказывает на какую клавишу нажать, говорит "осуждаю" после особенно грубых моментов и т.д. Ну и в целом тут много юмора. Чего стоит только одно описание косметички бывшей девушки, или отсылка к одному известному мему (это лучше увидеть самим). И при этом проходится всё за час, не успевая наскучить. Да ещё и разнообразно: эпизоды в доме чередуются тем самым сном, где мы изучаем лагерь кочевников. Открытый мир, между прочим.

The Last Dead End (Sonuncu Dalan)

Жанр - Хоррор / Шутер
Год - 2018
Платформа - ПК, PS4/PS5, Xbox One / Series S|X, Nintendo Switch
Разработчик - AzDimension (Азербайджан)
Издатель - AzDimension

Ну и добьём этот марафон азербайджанским хоррором про учёного, спасающего мир от конца света 2012 года. Действие происходит в Баку и авторы явно делали свой проект с большой любовью к своей столице. В игре есть тематическая энциклопедия, а некоторые районы воспроизведены в масштабе 1:1.

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

1992: Rasputie (в разработке)

Жанр - Стратегия
Год - 2026
Платформа - ПК
Разработчик - A2B games (Россия (?))
Издатель - A2B games

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

Заявлено как минимум четыре страны: Россия, Беларусь, Украина и Грузия. Соответственно, вы можете сделать политическую карьеру в любом из этих мест. Можно пользоваться законными методами, искать союзников среди влиятельных группировок и олигархов или устраивать протесты. Ну и коррупция тоже присутствует в качестве одной из основных игровых механик.

В общем идейное продолжение "Кризиса в Кремле" и его ответвлений.

Спасибо за внимание

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

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

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

Предыдущие подборки

Игры в постсоветском сеттинге: Часть 1 • Часть 2 • Часть 3

Постсоветский постапокалипсис: Часть 1 • Часть 2

Показать полностью 21
[моё] Компьютерные игры Видеоигра Подборка Постсоветское СНГ Дом Русалок Гифка Длиннопост
6
sergeitop08
11 дней назад

Программы для Windows, которые повысят вашу продуктивность и сделают работу комфортной⁠⁠

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

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

Список программ, которые будут рассмотрены в этой статье:

  • Microsoft PowerToys;

  • PuntoSwitcher;

  • TwinkleTray

  • Traffic Monitor;

  • Windhawk;

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

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

Microsoft PowerToys

Microsoft PowerToys - это набор утилит, которые помогут вам настроить Windows и упростить повседневные задачи. Я пользуюсь PowerToys каждый день, и честно говоря, без него работать в Windows становится неудобно. Привычные действия вроде организации окон или быстрого поиска нужной программы занимают гораздо меньше времени, если использовать PowerToys. С этим набором утилит всё происходит быстрее и удобнее, и со временем начинаешь замечать, что невозможно вернуться к обычной Windows без них. Скачать программу можно с официального GitHub репозитория или из Microsoft Store

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

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

PowerToys Run

Пример работы утилиты PowerToys Run

PowerToys Run — это средство быстрого запуска для Windows, которые обеспечивают мгновенный доступ к приложениям, файлам, функциям калькулятора и системным командам без ущерба для производительности.

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

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

Always On Top

Пример работы утилиты Always On Top

Пример работы утилиты Always On Top

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

Peek (Обзор)

Пример работы утилиты Peek

Пример работы утилиты Peek

PowerToys Peek — это программа, которая позволяет быстро просматривать содержимое файлов без необходимости открывать их в отдельных программах.

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

FancyZones

Пример работы утилиты FancyZones

Пример работы утилиты FancyZones

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

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

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

Advanced Paste (Расширенная вставка)

Пример работы утилиты Advanced Paste

Пример работы утилиты Advanced Paste

Advanced Paste — это мощный инструмент управления буфером обмена, который преобразует содержимое буфера обмена в любой нужный формат. Данное средство позволяет вставить содержимое буфера обмена в виде обычного текста, markdown, JSON или различных форматов файлов (.txt, .html, .png) с помощью интерфейса или сочетаний клавиш.

Утилита поддерживает извлечение текста из изображений с помощью локальной технологии OCR, а также умеет конвертировать аудио- и видеофайлы в форматы .mp3 и .mp4. Вся обработка выполняется локально. При желании можно подключить функции искусственного интеллекта (через API OpenAI) для ещё более продвинутой обработки.

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

Text Extractor

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

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

Color Picker(цветоподборщик)

Пример работы утилиты Color Picker

Пример работы утилиты Color Picker

Color Picker — это удобная программа для Windows, которая позволяет выбрать любой цвет с экрана и скопировать его в буфер обмена в нужном формате.

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

Screen Ruler(линейка экрана)

Пример работы утилиты Screen Ruler

Пример работы утилиты Screen Ruler

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

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

Вывод о Microsoft PowerToys

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

PuntoSwitcher

Пример работы PuntoSwitcher

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

Программу можно установить с официального сайта

TwinkleTray

Меню управления яркостью мониторов TwinkleTray

Меню управления яркостью мониторов TwinkleTray

TwinkleTray — Программа предоставляет простое управление яркостью ваших мониторов в Windows из системного трея. Эта утилита будет особенно полезна для тех, кто сидит по ночам за компьютером, а также у кого есть несколько мониторов. Скачать можно тут

Из основных фишек:

  • возможность управления функциями DDC/CI(контрастность, громкость и состояние питания) на мониторах, которые поддерживают данные функции

  • поддержка регулировки яркости в зависимости от времени суток или режима ожидания;

  • поддержка аргументов командной строки для пользовательских скриптов;

  • нормализация подсветки на разных мониторах;

Traffic Monitor

Пример работы программы Traffic Monitor

Пример работы программы Traffic Monitor

TrafficMonitor — это программа для системного мониторинга. Данная программа может стать частичной заменой для диспетчера задач, т.к. показывает скорость интернета, загрузку процессора и т.д. прямо на панели задач.

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

Windhawk

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

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

Slick Window Arrangement

Пример работы Slick Window Arrangement

Slick Window Arrangement — это модификация, которая «примагничивает» окна к краям экрана или друг к другу, делая рабочее пространство аккуратным и удобным. С её помощью можно легко организовать несколько окон на экране, чтобы всё выглядело упорядоченно и работалось комфортно.

Taskbar auto-hide when maximized + Taskbar auto-hide speed

Пример работы Taskbar auto-hide when maximized + Taskbar auto-hide speed

Taskbar Auto-Hide When Maximized — модификация, которая автоматически скрывает панель задач, когда окно развёрнуто на весь экран, позволяя работать без отвлекающих элементов.

Taskbar Auto-Hide Speed — модификация, обеспечивающая плавное и аккуратное скрытие панели задач, делая переход менее резким и более приятным для глаз.

Middle click to close on the taskbar

Пример работы Middle click to close on the taskbar

Middle click to close on the taskbar — модификация, позволяющая закрывать приложения, с помощью нажатия средней кнопки мыши на значок программы на панели задач.

Taskbar height and icon size

Примеры настройки Taskbar height and icon size

Примеры настройки Taskbar height and icon size

Taskbar Height and Icon Size — модификация, которая позволяет изменить размер значков на панели задач, уменьшить саму панель и подстроить её под свои предпочтения, делая рабочее пространство более компактным и удобным.

Taskbar Volume Control

Пример работы Taskbar Volume Control

Taskbar Volume Control — удобная модификация для быстрого способа изменения громкости, особенно полезно для тех у кого нету мультимедийных клавиш

Alt+Tab per monitor

Примеры настройки Alt+Tab per monitor

Alt+Tab per monitor — модификация, которая позволяет настроить поведение переключения между окнами через alt+tab таким образом, чтобы он отображался на том мониторе, где в данный момент находится курсор, показывая только окна, присутствующие на этом конкретном мониторе. Это очень крутая модификация для тех, кто использует 2 и более мониторов

Заключение

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

Если вам интересны лайфхаки, новые программы и свежие IT-новости, то подписывайтесь на мой Telegram-канал. Там я регулярно делюсь всем самым полезным из мира технологий

Показать полностью 16
[моё] Windows Софт Лайфхак Обзор Программа Эффективность Продуктивность Гифка Длиннопост
5
6
extatic0
12 дней назад

В Белоруисии заблокировали VK. В Белоруссии разблокировали VK⁠⁠

Сначала по непонятным причинам VK внестли в реестр запрещенных в Белоруссии, начали блокировать, но вскоре опять разблокировали. Никто ничего не понял. Источник

[моё] Юмор Республика Беларусь ВКонтакте Деньги Гифка
8
Посты не найдены
О нас
О Пикабу Контакты Реклама Сообщить об ошибке Сообщить о нарушении законодательства Отзывы и предложения Новости Пикабу Мобильное приложение RSS
Информация
Помощь Кодекс Пикабу Команда Пикабу Конфиденциальность Правила соцсети О рекомендациях О компании
Наши проекты
Блоги Работа Промокоды Игры Курсы
Партнёры
Промокоды Биг Гик Промокоды Lamoda Промокоды Мвидео Промокоды Яндекс Маркет Промокоды Пятерочка Промокоды Aroma Butik Промокоды Яндекс Путешествия Постила Футбол сегодня
На информационном ресурсе Pikabu.ru применяются рекомендательные технологии