Добро пожаловать в серию эмуляторов Gameboy Classic, в которой мы собираемся изучить и узнать, как создать эмулятор для известного портативного устройства Nintendo Gameboy Classic.

Этот эпизод «Эпизод 000» служит приквелом, предоставляя некоторые идеи о том, чего ожидать от сериала, мотивации его написания и процессе выбора проекта.

Соглашение об именах «Ep xxx» означает, что я пытаюсь быть оптимистом в отношении написания более 99 эпизодов, но не слишком оптимистичен в отношении того, что я не напишу более 999 эпизодов.

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

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

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

  • Обмен знаниями: в течение долгого времени я хотел написать несколько статей или сделать несколько руководств о вещах, которые я узнал во время учебы или работы. Каждый раз, когда я решаю это сделать, я чувствую, что мне не хватает знаний или опыта. В этой серии я пытаюсь преодолеть это чувство, делясь небольшими знаниями, которые у меня есть, и надеюсь, что они будут полезны некоторым читателям.
  • Участие в проекте: я всегда хотел создать проект с открытым исходным кодом и выпустить его функциональную версию. Часто погоня за совершенством и неловкость в обмене несовершенным кодом были основными причинами, по которым я никогда не заканчивал проект. Я думаю, что лучший способ (я постараюсь следовать этому в этом проекте и серии) — реализовать что-то простое, что работает и постоянно улучшается с течением времени или по мере необходимости. В этой серии я пытаюсь бороться с перфекционизмом, пишу несовершенный код и несовершенные статьи и со временем улучшаю их.
  • Обучение: я чувствую, что изучение нового проекта и написание о нем будет отличным опытом обучения. Попытки выразить свои мысли, подвергнуть сомнению мой процесс и исследовать новые концепции углубят мое понимание. Кроме того, отзывы и вопросы читателей предлагают альтернативные точки зрения. В этой серии я пытаюсь расширить свои существующие знания и узнать больше о себе и о том, что я знаю, а также узнать больше о вещах, которых я не знаю.

Следующим шагом стал выбор проекта для этой серии. Основной язык программирования, который я использую ежедневно и который я планирую использовать в этой серии, — это C++. Это общий язык для низкоуровневых и критичных к производительности приложений. Существует множество проектов, которые можно построить с помощью C++ (почти все!). Мне нужно было определить некоторые критерии того, как я буду выбирать проект:

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

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

Решение о том, какую консоль эмулировать, не заняло у меня много времени и мыслей. Я просто хотел начать, не тратя слишком много времени на поиск идеального варианта, и у меня было ощущение, что на самом деле не имеет значения, какую консоль я выберу в конце. Конечно, некоторые консоли сложнее эмулировать. Изучив интернет и добавив немного удачи и случайных факторов, я остановился на Gameboy Classic. Будем надеяться, что это будет хороший выбор!

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

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

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