Введение


Примерно тридцать лет назад (когда мне было около двадцати) я, как и многие другие разработчики, мечтал создавать игры. Однако оставался один нерешённый вопрос: для какой платформы их писать? Разумеется, я мог бы делать игры на Atari 1040 STE, который в то время у меня был, но мне хотелось достичь чего-то более крутого и сложного.

Позже я познакомился с Sega Mega Drive и меня сразу увлекла эта консоль, я играл в такие замечательные игры, как Sonic, Truxton, Revenge Of Shinobi и многие другие. Оборудование и графика консоли со встроенной программным параллаксным скроллингом были потрясающими.

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

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


Но для начала нужно убедиться в реалистичности задачи


Неужели я сошёл с ума? Почему я решил, что смогу справиться с этим?

  • Sega Mega Drive работает на процессоре Motorola MC68000, с которым я был близко знаком на самом низком уровне чипа. Также у консоли был отдельный сопроцессор Z80 для звука и других задач, который был поверхностно мне известен.
  • Я хорошо знал язык ассемблера MC68000, потому что много лет программировал низкоуровневые ассемблерные демо на домашнем компьютере Atari ST. Я один из первых участников SYNC — шведской демо-группы Atari ST. Подробнее о SYNC можно прочитать здесь и здесь. В своё время мы творили на Atari ST довольно безумные вещи.



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

Как подойти к решению этой задачи?


Моя цель заключалась в проектировании и изготовлении комплекта, который без внесения модификаций в Sega Mega Drive позволил бы мне «симулировать» картридж при помощи статической ОЗУ. Комплект подключался бы к компьютеру Atari ST, на котором бы я писал программы. Общая структура комплекта:


Картриджи


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


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

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

Игровой разъём на консоли


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


При помощи мультиметра мне удалось сопоставить большинство контактов с хорошо известной схемой контактов процессора.

Однако оставалось ещё один-два контакта, предназначение которых я не мог понять. И без настоящего логического анализатора мне бы довольно сложно было разобраться, что они делают. Так как мой бюджет был сильно ограничен, я решил изготовить анализатор самостоятельно. Насколько сложно это может быть? Поразмыслив, я понял, что мне достаточно только 8-битного чипа буфера FIFO на 2 КБ, который можно использовать для сэмплирования сигналов при запуске консоли после процесса сброса. Благодаря ему я мог изучить сигналы и расшифровать их связь с некоторыми другими хорошо известными контактами на шине процессора. Так как я хорошо разбирался в том, как работает шина MC68K, то был готов к этому испытанию.

По сути, мне нужно было следующее:


Но как мне раздобыть чип буфера FIFO? В то время я находился в Париже с другом, мы завершали создание аудиотрекера для Atari ST под названием Audio Sculpture, который затем продали французскому издателю.

Но вернёмся к приобретению чипа. Я каким-то образом узнал о ярмарке электроники в Париже, поэтому решил отправиться туда с целью попросить бесплатно опытный образец буфера FIFO. В результате мне удалось найти нужную компанию, и я получил бесплатный опытный образец чипа. Отлично!

Вот пара ссылок на опубликованные нами материалы об Audio Sculpture:


Но как извлечь данные из буфера FIFO? В моём Atari ST был разъём расширения, напрямую соединённый с шиной процессора внутри компьютера, поэтому добавив немного логики, я привязал буфер FIFO к этому разъёму. Я написал ПО для извлечения данных из буфера и отображения их на экране. При помощи этой методики мне наконец удалось разобраться с предназначением загадочных контактов.

И теперь у меня была полная схема разъёма для картриджей на консоли. Переходим к следующему испытанию!

Как передать мой код на Mega Drive


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

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

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

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

Плата памяти


Моя конструкция состояла из двух плат: платы памяти, на которой находилась только статическая ОЗУ, и платы логики для всего остального.

Для хранения игры я изготовил плату памяти, состоявшую из десяти чипов статичной ОЗУ по 128 КБ (KM681000LP-8) общей ёмкостью 1280 КБ. В то время большинство игр на Mega Drive требовали 256–512 КБ ёмкости, а некоторым требовалось и больше.

Наряду с чипами памяти я добавил на плату памяти следующие буферы, чтобы не перегружать системную шину на Mega Drive:

  • Два 74HC245 — 8-битных двунаправленных передатчика для шины данных
  • Три HC541 – 8-битный драйвер для адресной шины

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


При помощи эмулятора DOS DOSBox-X мне удалось извлечь файлы схем печатных плат из старого ПО для проектирования плат, работавшего в DOS. Вот результат:


Ссылка на PDF

Плата логики


Вторая плата этого комплекта состояла из следующих частей:

  • Два чипа EPROM, на которой хранилась прошивка для запуска
  • Промежуточная логика для соединения несовместимых компонентов (на схеме выше обозначена как Glue logic)
  • Соединение с платой памяти
  • Соединение с компьютером-хостом

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


Для быстроты прототипирования я выполнял монтаж плат скруткой:


Как видно из скриншотов ниже, я начал проектировать реальную печатную плату, но, к сожалению, так её и не собрал.



Промежуточная логика


Чтобы связать всю необходимую логику, я добавил небольшой чип PAL (Programmable Array Logic), содержавший промежуточную логику (glue logic), необходимую для объединения всей системы.


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

Схемы


Схема конструкции находится здесь. Однако поскольку в те времена систем контроля версий не существовало, я не уверен, окончательная ли это схема.

Получилось ли у меня?


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

Для создания программ на Atari ST я использовал инструмент Turbo Assembler. Turbo Assembler был совершенно уникальной IDE языка ассемблера, потому что он предварительно генерировал двоичные данные прямо в процессе набора. Второе преимущество Turbo Assembler заключалось в том, что он позволял мне разрабатывать собственные драйверы/целевые платформы. Благодаря этому я мог отправлять готовый ассемблерный код непосредственно на свой аппаратный комплект. Потрясающе!

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

Готовый результат


Итак, как же выглядел готовый проект? Вот его фотографии:






Более мощная прошивка


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

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

Об авторе


Меня заинтересовали компьютеры с тех пор, как примерно в 1981 году мне достался первый Commodore VIC-20. После него я последовательно переходил на Commodore C64, Atari ST, Atari ATW (да, у меня действительно был в своё время Atari ATW с пятью транспьютерными чипами внутри) с операционной системой Helios, а сегодня на PC!

После этого проекта следующей большой работой стало создание Programmers Heaven; изначально это были два CD-ROM, которые я издавал, но постепенно превратилось в крупное сообщество разработчиков, активное с 1996 по 2008 годы. Надеюсь, в ближайшем будущем я смогу написать о нём пост.

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

Комментарии (13)


  1. Bromka
    21.01.2022 09:45
    +4

    Как то даже стыдно за себя.


  1. v1000
    21.01.2022 10:04

    Всегда удивляло, что у Sega Mega Drive никакого Drive в смысле вращяющегося диска не было. Sega CD не в счет - это аддон.


    1. salnicoff
      21.01.2022 10:24
      +3

      «Drive» в данном случае — «движуха», драйв от того, что человек играет в игры.


      1. v1000
        21.01.2022 10:36

        Ну это понятно, просто когда вокруг названия CD-Drive, HDD-Drive и прочее, Mega Drive звучит, словно это какой-то высокоростной накопитель.


        1. glebasterBajo
          21.01.2022 10:50
          +5

          В начале 90-х (будучи школьником начальных классов) я даже слов-то таких не знал - CD-Drive, HDD-Drive. И слово Drive дейтсвительно ассоциировалось с удовольствием получаемым от игры, а не с "крутящимся источником данных" )


        1. arseniy2
          21.01.2022 10:56

          Вероятно поэтому в США она называлась Sega Genesis


          1. Mozhaiskiy
            21.01.2022 12:09

            Насколько я слышал, в США торговая марка "MegaDrive" уже была занята кем-то другим. Пришлось называть Genesis.

            Вот, что говорит Вики:

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


            1. arseniy2
              21.01.2022 14:18

              А, вот как.


  1. drWhy
    21.01.2022 22:22
    +1

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

    Накрутки на контактах разъёма


    1. sim2q
      22.01.2022 07:10
      +1

      Заманчивая штука, но нужны и разъёмы специальные и приспособа. Запал тут на провод в легкоплавком лаке, купил катушку, а он оказался ну прям очень не очень. Греть надо долго и сильно. Не тот короче. Кошерный был цветной, ака цапончиком покрытый и от паяльника даже цветное облачко образовывалось. Но мне кажется при интенсивной отладке всё это будет прижигаться в рандомных местах и всё опять сведётся к МГТФ....


      1. drWhy
        22.01.2022 16:36

        МГТФ и МС на производстве обжигалкой зачищали, кусачками было запрещено. А обжигать фторопласт без вытяжки наверно не лучшая идея.
        Ещё вспоминается самозачищающийся провод, которым предлагалось монтировать один из самодельных компьютеров на «стежковой плате»- «Специалист»?


        1. sim2q
          22.01.2022 22:16
          +1

          МГТФ и МС на производстве обжигалкой зачищали

          столько раз уже слышал... решил попробовать - у меня всякий пластик резать есть детский выжигатель:)
          Ну что ж..... - Иди нафиг!, сказал провод... Я фторопласт!


  1. alartus
    23.01.2022 02:12

    Крутотень-то какая... Сейчас для сеги продаются кастомные картриджи на ПЛИС, в которые microSD с играми вставляется, видел ромы чуть ли не на 10 мегабайт. Тоже вроде как инструмент для разработки. Купил один такой, но когда включил, спустя столько лет расстроил звук (в эмуляторе он гораздо лучше, хотя сега настоящая японская).