Русский
Русский
English
Статистика
Реклама

Gameboy

Перевод Перепрограммирование GameBoy за счёт бага в Pokemon Yellow

18.05.2021 10:20:20 | Автор: admin

Pokemon Yellow - это карманная вселенная со своими правилами. В ней можно покупать и продавать предметы, тренировать покемонов, побеждать других тренеров но нельзя менять правила самой игры. Нельзя построить себе дом, поменять музыку или даже переодеться. Точнее, так было задумано. На самом деле есть последовательность валидных команд (типа перемещения из одного места в другое и манипуляций с предметами), которая позволяет превратить игру в Pacman, тетрис, Pong, MIDI-проигрыватель и что угодно ещё.

Существует спидран Felipe Lopes de Freitas (p4wn3r), в котором Pokemon Yellow проходится за 1 минуту 36 секунд. Этот спидран основан на следующем хаке: в норме инвентарь игрока ограничен 20 предметами. Но есть баг, который позволяет игнорировать это ограничение и обращаться с памятью, расположенной сразу после инвентаря, как будто бы это был список предметов. Соответственно, стандартные манипуляции с предметами позволяют эту память переписывать. Спидраннер использует эту возможность, чтобы заставить дверь из стартовой комнаты переносить его на финальную локацию, в которой ему остаётся только выслушать поздравления.

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

Gameboy это восьмибитный компьютер. Соответственно, всё происходящее в игре результат того, что исполняется некая последовательность однобайтовых команд. Например, последовательность[62 16 37 224 47 240 37 230 15 55] в местных машинных кодах означает, что надо выяснить, какие кнопки нажаты в данный момент, и записать результат в регистр A. Можно создать программу, которая будет читать ввод с кнопок и записывать куда-нибудь в память исполняемый код, а потом передавать ему управление. Если удастся каким-то образом засунуть такую программу (назовём её программой ввода) в память и заставить Gameboy её исполнить то я выиграл, потому что теперь я могу исполнять произвольный код (скажем, тетрис) вместо Pokemon Yellow.

Во-первых, как написать такую программу? Восьмибитными числами представлены не только правила, но и состояние игры (инвентарь, список покемонов, имя главного героя и т.п.) Инвентарь хранится вот так:

item-one-id         (0-255)item-one-quantity   (0-255)item-two-id         (0-255)item-two-quantity   (0-255)...

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

lemonade     x16guard spec.  x224leaf stone   x240guard spec.  x230parlyz heal  x55

Так что если нам удастся собрать нужные предметы в нужном количестве и порядке то получится код программы ввода. Правда, его с самого начала нужно писать так, чтобы он состоял только из валидных ID и количеств предметов. Это не так-то просто, потому что предметов в игре немного, а многие машинные инструкции состоят из 2-3 битов. Та версия программы, на которой я остановился, состоит из 92 бит; примерно половина из них не делает ничего полезного и вставлена только для того, чтоб код был ещё и корректным списком предметов.

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

Поехали!

Я начинаю с того, что называю своего противника Lp/k. Эти символы в своё время превратятся в предметы и будут перемещены на указатель функции, чтобы я мог исполнить программу ввода. Но сперва её надо записать, так что я начинаю забег так же, как и p4wn3r: перезапускаю игру при сохранении, чтобы сломать список покемонов. После этого я меняю местами 8 и 10 покемона, что ломает список предметов и позволяет мне манипулировать предметами после 20-го (то есть соответствующей областью памяти). С помощью этих манипуляций я выставляю скорость текста на максимум и переключаю свою дверь на магазин Celadon Dept. store. p4wn3r в этот момент переключил её на Зал славы и выиграл, но мне неинтересен спидран как таковой.

Поэтому я не останавливаюсь, а выкладываю из своего поломанного инвентаря в сундук множество глитчевых предметов 0x00, которые мне ещё пригодятся. Потом я забираю из сундука зелье, что вызывает переполнение счётчика предметов с 0xFF на 0x00 и восстанавливает мой инвентарь. Зелье при этом, правда, исчезает. После этого я забираю 255 0x00-предметов и отправляюсь в магазин. Там я продаю 2 0x00 за 414925 монет каждый, что позволяет мне купить следующие предметы:

+-------------------+----------+|##| Item           | Quantity |+--+----------------+----------+|1 | TM02           |  98      ||2 | TM37           |  71      ||3 | TM05           |   1      ||4 | TM09           |   1      ||5 | burn-heal      |  12      ||6 | ice-heal       |  55      ||7 | parlyz-heal    |  99      ||8 | parlyz-heal    |  55      ||9 | TM18           |   1      ||10| fire-stone     |  23      ||11| water-stone    |  29      ||12| x-accuracy     |  58      ||13| guard-spec     |  99      ||14| guard-spec     |  24      ||15| lemonade       |  16      ||16| TM13           |   1      |+--+----------------+----------+

Эти предметы я раскладываю в инвентаре в таком порядке, чтобы получилась моя первая программа ввода. Первая потому что написать окончательную версию программы ввода внутри игры у меня не получилось. Та, которую я собираю из предметов, умеет читать только кнопки A, B, start и select. Каждый фрейм игры она пишет 4 бита в определённую область памяти; собрав 200 с лишним байт, она исполняет то, что написала. С помощью этой программы я пишу следующую, которая читает уже все 8 кнопок и пишет произвольное число байтов в произвольную область памяти, а потом исполняет код по произвольному адресу. Эта программа, в свою очередь, используется для загрузки третьей, которая делает всё то же самое, но ещё и выводит записываемый код на экран.

Закончив с кодом первой программы, я отправляюсь в Celadon mansion (это не критично, мне просто нравится локация). Там я снова меняю местами сломанных покемонов и ломаю инвентарь. Проскроллив до имени своего противника, я выкидываю предметы до тех пор, пока имя не окажется на указателе функции. Как только я закрываю меню, программа ввода исполняется, и я могу заливать следующую программу.

Инфраструктура

Всё видео было записано ботами, а сам я к Gameboy (точнее, к эмулятору) даже не притрагивался. Ниже краткое описание инфраструктуры, которую я создал для этого проекта. Исходники доступны в http://hg.bortreb.com/vba-clojure

Прежде всего, мне нужен был программный доступ к эмулятору, так что я скачал vba-rerecording. Поверх него я написал низкоуровневый интерфейс на C, к которому я смогу обращаться из Java через JNI. Этот интерфейс позволяет обращаться к базовым функциям эмулятора: прогнать один фрейм игры или один тик часов Gameboy, обратиться к любому адресу памяти или регистру. Кроме того, он позволяет выгрузить состояние эмулятора в объект Java или загрузить его обратно.

Поверх JNI я написал обёртку на clojure, так что в итоге у меня получился функциональный интерфейс к vba-rerecording. Этот интерфейс работает с состоянием эмулятора как с иммутабельным объектом и позволяет делать в функциональном стиле всё то, что интерфейс на C позволял делать в императивном. С помощью этого интерфейса я написал функции, которые принимают на вход состояние эмулятора, находят и исполняют последовательность команд, которая приведёт к желаемому эффекту. Из этих функций я собрал высокоуровневые функции, которые выполняют в игре задачи типа перемещения и покупки предметов. Вот, например, код для перемещения кратчайшим путём из магазина покемонов в Viridian City в лабораторию Оака:

(defn-memo viridian-store->oaks-lab  ([] (viridian-store->oaks-lab       (get-oaks-parcel)))  ([script]     (->> script          (walk [                                                                                                                                                                                                                                       ])          (walk-thru-grass           [      ])          (walk [                                                ])                          (do-nothing 1))))

А вот функция, которая находит кратчайшую последовательность команд для переноса нужных предметов в сундук:

(defn-memo hacking-10  ([] (hacking-10 (hacking-9)))  ([script]     (->> script          begin-deposit          (deposit-held-item 17 230)          (deposit-held-item-named :parlyz-heal 55)          (deposit-held-item 14 178)          (deposit-held-item-named :water-stone 29)          (deposit-held-item 14 32)          (deposit-held-item-named :TM18 1)          (deposit-held-item 13 1)          (deposit-held-item 13 191)          (deposit-held-item-named :TM02 98)          (deposit-held-item-named :TM09 1)          close-menu)))

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

Программа ввода

(defn pc-item-writer-program

[]

(let [;;limit 75

limit 201 ;; (item-hack 201 is the smallest I could make this.)

[target-high target-low] (disect-bytes-2 pokemon-list-start)]

(flatten

[[0x00 ;; (item-hack) no-op (can't buy repel (1E) at celadon)

0x1E ;; load limit into E

limit

0x3F ;; (item-hack) set carry flag no-op

;; load 2 into C.

0x0E ;; C == 1 means input-first nybble

0x04 ;; C == 0 means input-second nybble

0x21 ;; load target into HL

target-low

target-high

0x37 ;; (item-hack) set carry flag no-op

0x00 ;; (item-hack) no-op

0x37 ;; (item-hack) set carry flag no-op

0x00 ;; (item-hack) no-op

0xF3 ;; disable interrupts

;; Input Section

0x3E ;; load 0x20 into A, to measure buttons

0x10

0x00 ;; (item-hack) no-op

0xE0 ;; load A into [FF00]

0x00

0xF0 ;; load 0xFF00 into A to get

0x00 ;; button presses

0xE6

0x0F ;; select bottom four bits of A

0x37 ;; (item-hack) set carry flag no-op

0x00 ;; (item-hack) no-op

0xB8 ;; see if input is different (CP A B)

0x00 ;; (item-hack) (INC SP)

0x28 ;; repeat above steps if input is not different

;; (jump relative backwards if B != A)

0xED ;; (literal -19) (item-hack) -19 == egg bomb (TM37)

0x47 ;; load A into B

0x0D ;; dec C

0x37 ;; (item-hack) set-carry flag

;; branch based on C:

0x20 ;; JR NZ

23 ;; skip "input second nybble" and "jump to target" below

;; input second nybble

0x0C ;; inc C

0x0C ;; inc C

0x00 ;; (item-hack) no-op

0xE6 ;; select bottom bits

0x0F

0x37 ;; (item-hack) set-carry flag no-op

0x00 ;; (item-hack) no-op

0xB2 ;; (OR A D) -> A

0x22 ;; (do (A -> (HL)) (INC HL))

0x1D ;; (DEC E)

0x00 ;; (item-hack)

0x20 ;; jump back to input section if not done

0xDA ;; literal -36 == TM 18 (counter)

0x01 ;; (item-hack) set BC to literal (no-op)

;; jump to target

0x00 ;; (item-hack) these two bytes can be anything.

0x01

0x00 ;; (item-hack) no-op

0xBF ;; (CP A A) ensures Z

0xCA ;; (item-hack) jump if Z

target-low

target-high

0x01 ;; (item-hack) will never be reached.

;; input first nybble

0x00

0xCB

0x37 ;; swap nybbles on A

0x57 ;; A -> D

0x37 ;; (item-hack) set carry flag no-op

0x18 ;; relative jump backwards

0xCD ;; literal -51 == TM05; go back to input section

0x01 ;; (item-hack) will never reach this instruction

]

(repeat 8 [0x00 0x01]);; these can be anything

[;; jump to actual program

0x00

0x37 ;; (item-hack) set carry flag no-op

0x2E ;; 0x3A -> L

0x3A

0x00 ;; (item-hack) no-op

0x26 ;; 0xD5 -> L

0xD5

0x01 ;; (item-hack) set-carry BC

0x00 ;; (item-hack) these can be anything

0x01

0x00

0xE9 ;; jump to (HL)

Мне особенно пригодились глитч-предметы 0x00 и 0xFF. 0x00 стоит почти половину максимально возможного числа денег, и всего двух хватило на то, чтоб купить все необходимые предметы. К тому же 0x00 это NO-OP, который я могу вставлять куда угодно, чтобы подогнать программу под требования инвентаря. 0xFF имеет другое полезное свойство. В норме игра объединяет стеки предметов: если купить, например, покеболл, а потом ещё один покеболл, то инвентарь будет выглядеть вот так:

pokeball x2

Но если где-то перед тем в списке предметов есть 0xFF, то эта функция отключается, что позволяет мне получить вот такой инвентарь:

pokeball x1pokeball x1pokeball x1

Так что я вставляю в самое начало инвентаря 0xFF и больше об этом не беспокоюсь.

Полезная нагрузка, которую я залил в Gameboy, это тоже последовательность программ. Я создал упрощённый формат MIDI, имплементировал его в машинных кодах GameBoy, и перевёл в свой формат мелодию с http://www.everyponysings.com/. В полезной нагрузке последней программы ввода содержится как сам MIDI-файл, так и интерпретатор. Картинка устроена так же я перевёл PNG-файл в Gameboy-совместимый формат и добавил код, который её показывает. И картинку, и мелодию загружает последняя программа ввода, так что исходники можно увидеть на экране эмулятора (или скачать с http://hg.bortreb.com/vba-clojure).

Подробнее..

Перевод Ретро Game Boy, который работает на солнечной энергии и от нажатий кнопок

08.09.2020 12:21:09 | Автор: admin

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

Энергетические технологии значительно продвинулись со времен первых портативных игровых приставок, появившихся в 70-х и 80-х. Чтобы продемонстрировать эти достижения и показать, куда они могут привести нас в будущем, группа исследователей сконструировала приставку Game Boy, которая вместо батареек использует комбинированный источник питания: от солнечной энергии и от взаимодействия пользователя с устройством.

Самодостаточную игровую систему разработали ученые из Северо-Западного университета в США и Делфтского технического университета в Нидерландах, которые намеревались исследовать пределы безбатарейной вычислительной техники. Система оснащена репликой процессора, который использовался в оригинальной 8-битной ретро-приставке Nintendo Game Boy. На устройстве можно играть в игры с оригинальных картриджей консоли, что, по наблюдениям команды, требует значительных вычислительных мощностей и много энергии.

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


Самодостаточная игровая система разработана учеными из Северо-Западного университета в США и Делфтского технического университета в Нидерландах.

Это первое интерактивное устройство, которое получает энергию от действий пользователя, говорит Джозия Хестерн из Северо-Западного университета, один из руководителей исследования. Когда вы нажимаете кнопку, то устройство конвертирует энергию, чтобы поддерживать вашу игру.

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



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

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

Прослушайте рассказ Хестера ниже.


Подробнее о проекте читайте тут.

***

Послесловие переводчика



Вечная приставка Game Boy может стать прототипом неубиваемых рабочих инструментов для пожарных или туристов. Надо отметить, что для оригинального игрового устройства от Nintendo уже выходили аксессуары для зарядки от солнца. Например, Game Boy Solar Charger.


Подробнее..

Перевод Самодельная портативная консоль microByte

18.12.2020 10:08:54 | Автор: admin

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

Введение


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

Может, разработать брелок, на котором можно будет играть в Pokemon?

В этот момент зародилась примитивная идея microByte. Спустя более семи месяцев идея брелока эволюционировала в полнофункциональную портативную консоль, способную эмулировать:

  • NES
  • GameBoy
  • GameBoy Color
  • Sega Master System
  • GameGear

И всё это в крошечном размере картриджа первого GameBoy. Самое важное, что тексты в игре читаемы, нужна только лупа. Размеры устройства: 78x17x40 мм

С другой стороны, вы можете задаться вопросом, зачем добавлять раскладку геймпада SNES (кнопки направлений, 4 кнопки действий, Start, Select, L и R.), если устройство может эмулировать только 8-битные игры?

Ну да, пока она способна запускать только 8-битные игры, но проведя тщательные поиски, я выяснил, что для ESP32 уже существуют первые порты эмулятора SNES и SCRUMV. Поэтому стало очевидно, что устройству требуется полная раскладка геймпада SNES с перспективой на дальшейшие обновления.

К тому же я считаю, что кроме игр, устройство может быть очень полезным инструментом в разработке проектов на ESP32, потому что можно запускать скетчи Arduino и/или двоичные файлы проектов ESP-IDF с SD-карты как приложения, не удаляя при этом основную прошивку. Ниже я расскажу об этом подробнее.

Вот краткий видеообзор:


Спецификации


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

Оборудование


Мы начнём с общего списка характеристик оборудования:

  • ESP32 WROVER E (16 МБ)
    • 8 МБ ОЗУ
    • 16 МБ флэш-памяти
  • 1,3-дюймовый IPS-дисплей ST7789 с разрешением 240x240 пикселей
  • Разъём для карты micro-SD.
  • Встроенный динамик с усилителем звука MAX98357AETE+T I2S.
  • 13 встроенных кнопок, подключенных к мультиплексору TCA9555RTWR.
    • 8 индуктивных кнопок с резиновой мембраной (кнопки направлений и действий)
    • 3 кнопки-переключателя (Start, Select и Menu)
    • 2 горизонтальных кнопки-переключателя (левый и правый триггеры).
  • Цепь аккумулятора с защитой зарядки.
  • Аккумулятор 500 мАч (этого достаточно для 6-7 часов автономной игры).
  • Разъём USB-C.

В этом репозитории можно найти проект KiCad со схемой и конструкцией печатной платы проекта microByte: прошивка/конструкция печатной платы

Фотографии платы:

Вид сверху


Вид снизу


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

Как видно на втором фото, для подключения аккумулятора я использовал стандартный разъём PH 2.0. Это позволяет использовать аккумулятор большей ёмкости. Если вы хотите использовать меньшую ёмкость, то важно заменить резистор R2, чтобы значение было соответствующим. Этот резистор задаёт конфигурацию зарядки для чипа TP4056. Если не поменять значение резистора R2, то это приведёт к повреждению литий-полимерного аккумулятора. Также устройство содержит повышающий преобразователь, гарантирующий стабильные 3,3 В на выходе; это решение позволяет избежать снижения яркости экрана и нестабильного поведения при разрядке аккумулятора.

Используется усилитель звука MAX98357AETE+T. Этот драйвер выполняет преобразование из I2S на ADC, его можно настроить на работу с моно-/стереосигналом, а коэффициент усиления конфигурируется. По умолчанию я установил коэффициент усиления в 9 дБ. Думаю, этого достаточно, чтобы избежать повреждения динамика. Кстати, о динамике: очень сложно найти дешёвый SMD-динамик, на который хватит места на плате, поэтому я нашёл пищалку с хорошим диапазоном частот, помещающуюся на печатной плате.

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

Наконец, должен ещё раз повториться экран потрясающий по цене и размеру. Качество картинки превосходно. Также меня впечатлила возможность получения стабильной скорости связи на 60 МГц при использовании простого SPI (то есть не quad-SPI).

Программное обеспечение


ПО было разработано при помощи фреймворка ESP-IDF и freeRTOS в качестве ОСРВ.

Прошивку и руководство по настройке можно найти здесь: прошивка microByte.

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

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

На нижнем слое ПО есть HAL (Hardware abstraction layer, слой абстрагирования от оборудования), который упрощает доступ к аппаратным ресурсам эмуляторам, задаче-менеджеру и GUI. Наконец, на самом дне есть драйверы, взаимодействующие с HAL.

Все эмуляторы и GUI работают в одном приложении ESP32, это обеспечивает очень хорошее время загрузки игр и системы в целом. Игры размером меньше 4 МБ могут загружаться менее чем за две секунды!

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

На данный момент оно содержит только следующие опции:

  • Изменение яркости.
  • Изменение уровня громкости.
  • Смена цвета интерфейса.
  • Включение тёмного режима.
  • Получение данных об устройстве.
  • Получение информации об SD-карте.
  • Получение данных об аккумуляторе.

Ещё один важный аспект устройства это эмуляторы. Они были усовершенствованы и адаптированы к устройству. Эмуляция GameBoy/GameBoy Color и Game Gear обеспечивает очень хорошие результаты с полной частотой кадров.

Работа внешних приложений похожа на трюк, но позволила добиться очень хороших результатов. Устройство имеет два раздела OTA и любой из них может быть основным разделом. То есть если на раздел OTA 0 записана версия 1.0 прошивки и вы хотите обновить устройство до версии 1.1 через SD-карту, то в случае успешного обновления при следующем перезапуске основным разделом для приложений будет OTA 1 с версией 1.1, а раздел OTA 0 будет стёрт.

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

Это довольно быстрый процесс, но он сильно зависит от размера двоичного файла. Например, загрузка простого примера Blink займёт 5-10 секунд, а игра Doom 1 до 20 секунд.

Корпус устройства


Корпус спроектирован так, чтобы его можно было легко напечатать на 3D-принтере, но в то же время чтобы он обеспечивал удобство игры. Все файлы можно найти в этом репозитории: файлы stl microByte.

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

Как говорилось выше, корпус очень легко печатается, я выполнял печать материалами PLA и PTEG на Ender 3, и результаты вышли очень хорошими. Кроме того, я напечатал несколько корпусов на разных SLA-принтерах наподобие Eleegoo Mars, и результаты тоже были потрясающими.

Вскоре я дополню репозиторий инструкциями по печати.

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


Вот несколько рендеров корпуса в разных цветах:





Будущие усовершенствования


На данном этапе производительность в целом стабильна и хороша, устройство выдаёт полную частоту кадров в играх GameBoy/GameBoy Color и GameGear.

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

  • Улучшить производительность NES. Большинство игр работает хорошо, но имеет некоторые глитчи и нестабильность скорости.
  • Снижение эффекта тиринга (tearing, разрыва кадра). В некоторых играх заметен эффект тиринга, хоть это и небольшая проблема, но её может быть неприятно наблюдать.
  • Небольшое усовершенствование GUI. В игре есть внутриигровое меню, в котором можно управлять яркостью экрана, громкостью звука, сохранять игру Это меню иногда вызывает проблемы и может блокировать систему паузы, которая запускается нажатием кнопки меню.

Также я запланировал добавить в будущих обновлениях следующее:

  • Поддержку эмуляции SNES. Я нахожусь в самом начале процесса, но мне кажется, что её можно заставить работать.
  • Добавить репозиторий с внешними приложениями, как то:
    • Bluetooth-геймпад.
    • Анализатор сети Wi-Fi.
    • Doom.
  • Создать библиотеку Arduino для удобного создания скетчей для этого устройства.

Авторы приложений


Эмулятор GameBoy/GameBoy Color является портом эмулятора GNUBoy.

Эмулятор NES это порт эмулятора Nofrendo, который изначально разрабатывался Espressif.

Эмулятор Sega Master System и Game Gear это порт, реализованный Espressif.

Также стоит сказать, что на создание этого проекта меня вдохновили потрясающие устройства ESPlay micro и Odroid GO.



На правах рекламы


Воплощайте любые идеи и проекты с помощью наших серверов с мгновенной активацией на Linux или Windows. Сервер готов к работе через минуту после оплаты!

Подробнее..

WorkBoy, клавиатуру для GameBoy, превращающую его в КПК, нашли и протестировали спустя 28 лет после анонса

30.12.2020 00:08:02 | Автор: admin

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

Так случилось пару дней назад одному из археологов удалось найти крайне редкий девайс. Это WorkBoy, аксессуар для игровой портативной консоли от Nintendo GameBoy. Он представляет собой специализированную клавиатуру, которая превращает игровой девайс в некое подобие КПК с дополнительным программным обеспечением.

На прошлых выходных Лайам Робертсон, специалист по видеоиграм, опубликовал видео, в котором он рассказал подробности своей находки. Ему удалось найти прототип, часть очень небольшой партии увидевших свет WorkBoy.


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

Зачем клавиатура для игровой консоли? На самом деле, она открывала доступ к 12 приложениям, включая еженедельник, конвертер валют, календарь, напоминалку. Так что портативный девайс превращался в достаточно удобный КПК с базовыми возможностями. Ну и, конечно, консоль оставалась консолью, так что играть можно было в любое время, хоть с подключенной клавиатурой, хоть без нее. Для получения доступа к приложениям нужен был специальный картридж.


Робертсон заявил, что впервые прототип клавиатуры для GameBoy был представлен на CES electronics в 1992 году, в мае. Эта выставка была удачной для компании, которая представила целый ряд новых продуктов, но вот клавиатура осталась почти незамеченной журналистами. Скорее всего, просто потому, что она никак не относилась к игровому миру, поэтому игровые СМИ о таком девайсе писать не захотели. Более того, одно из изданий, все же упомянувших о девайсе, назвало его нелепым.

Робертсон связался с представителем компании, которая разработала девайс для Nintendo, и тот поделился рядом подробностей. Так, например, стало известно, что стоимость клавиатуры $79-$89, что было немало. Высокая цена одна из причин, которые помешали выходу аксессуара на рынок.

Робертсону удалось получить доступ к девайсу и протестировать его. Сначала ничего не получилось как раз по причине отсутствия того самого картриджа, о котором говорилось выше. Но потом исследователю повезло летом в интернет попала целая куча файлов, которая имела отношение к разработкам Nintendo, и один из этих файлов оказался рабочим образом ПО для WorkBoy.

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

Так что все это стало причиной отсутствия интереса пользователей и самой компании к небольшой клавиатуре, превращающей GameBoy в КПК. Если бы цена была ниже, то вполне возможно, что судьба WorkBoy ложилась бы совсем иначе. Но хорошо уже и то, что этот девайс получил свою минуту славы, хотя и спустя 28 лет после выхода в свет.

Подробнее..

Категории

Последние комментарии

  • Имя: Макс
    24.08.2022 | 11:28
    Я разраб в IT компании, работаю на арбитражную команду. Мы работаем с приламы и сайтами, при работе замечаются постоянные баны и лаги. Пацаны посоветовали сервис по анализу исходного кода,https://app Подробнее..
  • Имя: 9055410337
    20.08.2022 | 17:41
    поможем пишите в телеграм Подробнее..
  • Имя: sabbat
    17.08.2022 | 20:42
    Охренеть.. это просто шикарная статья, феноменально круто. Большое спасибо за разбор! Надеюсь как-нибудь с тобой связаться для обсуждений чего-либо) Подробнее..
  • Имя: Мария
    09.08.2022 | 14:44
    Добрый день. Если обладаете такой информацией, то подскажите, пожалуйста, где можно найти много-много материала по Yggdrasil и его уязвимостях для написания диплома? Благодарю. Подробнее..
© 2006-2024, personeltest.ru