Magistr16 – «дисководная сега».

Технический обзор, аналитика и доработки.

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

С одной стороны, если не брать во внимание «архитектурные нахлабучки», Магистр16 это обычная однокристальная Сега МегаДрайв построенная на одном из лучших чипсетов - SM801. К преимуществам в этом ключе тут можно отнести ожидаемо качественную картинку «уровня эмулятора» даже через композитный интерфейс, а так же наличие разведенных на плате Magistr16 от чипсета SM801-A1 сигналов RGB на отдельные контактные площадки (т.е. можно легко и изящно эти линии распаять на внутренние штырьки и использовать RGB-сигнал произвольным удобным способом, что в принципе для подобных однокристаллок тех лет – редкость: хотя, в тоже время, что мешало вывести RGB-сигнал на штатный мульти-коннектор как в официальных приставках?). К недостаткам Магистра16 навскидку можно отнести повышенный вес (более половины которого составляет классический 3.5-дюймовый дисковод, мало-юзабельный – но половина «всей соли» точно в нем) и несимметричную развесовку, как следствие бездарно-пустующего корпуса. Да, треть корпуса слева просто нещадно пустует и заполнить ее штатным образом нечем (а нештатным … несколько заморочно). Вот, как-то так. Обзор можно закрывать? – но не для этого я поднял и открыл тему об этом весьма специфичном и неоднозначном со многих сторон варианте интегрированного аппаратного аддона к классическому МегаДрайву, который мне недавно подарили ;-) А по сему далее продолжу повествование в подробностях …

2000 год - казалось бы эпоха МегаДрайва, как актуальной (т.е. современной) игровой платформы, прошла уже минимум лет пять назад. Да в нашей стране традиционно развитие техники и технологий движется с запозданием, но … Уже в 1998-99 годах у геймеров (у меня в том числе) на вооружении был ПК класса «Пеньтиум» с 3dfx-Voodoo внутри – т.е. игровая платформа превосходившая все «актуальные» приставки того времени и стоившая вполне разумных денег (в отличие от N64, например). Удивительно даже, что кто-то в те годы покупал МегаДрайв именно для игр (а не в порядке технической и/или геймерской ностальгии как сейчас), а еще более удивительно что к МегаДрайву продолжали (или только начали?) разрабатываться новые технические решения! Причем ни где-нибудь, а у нас (хоть и с последующим производством всё в том же Китае – привет Стиплеру и его Денди). Не иначе как упражнялись в «импортозамещении» ;-)

Какие же дополнительные «фишки» предлагает конечному пользователю Магистр16? При беглом осмотре корпуса кроме дисковода сбоку можно обнаружить с тыльной стороны нетипичные для МегаДрайва разъемы для клавиатуры и мыши (форм-фактора PS/2), а также COM- и LPT- порты (скрестили «ужа с ежом»?). Корпус содержит два отсека с отщелкивающимися крышками: маленький на дне по центру (с нераспаянным разъемом неизвестного форм-фактора и назначения, а также типичными региональными переключателями), и большой на дне с краю – в котором виднеется краевой разъем подобный тому, что в оригинальных сегах использовался для подключения Sega-CD. Но почему он с другой стороны? И корпус явно не позволит Sega-CD даже приблизиться к нему. Да и контактов в нем как у слота картриджа (32*2), а не как в слоте расширения для Sega-CD (30*2). А еще парой шторок закрыто пространство а-ля как щели под планки карт расширения в ПК – только за ними тоже очень-очень пусто.

В комплекте к Магистру предусмотрен картридж, лишь программное обеспечение которого способно использовать все (или не все?) дополнительные архитектурные и периферийные расширения этой машины (об этом позже).

Технический обзор.

Что внутри?

Много разного и непонятного? Рассматриваем, разбираемся …

В двух словах: не мудрствуя ни капли разработчики тупо посадили на шину МегаДрайва «компьютерный» multi-io чипсет W83977F (да, именно тот что имели многие системные платы ПК тех времен) – собственно поддержка всех внешних «нахлабучек» и «приблуд» это чисто его функционал (клавиатура, мышь, дисковод, порты, часы). Да, еще у МегаДрайв-части Магистра увеличили ОЗУ в 4 раза (зачем-то? – до 256кбайт) и добавили «встроенный накопитель» (флешку, на 256кбайт). Ну и само-собой «маппер» - адресный декодер, выходящий за пределы архитектуры МегаДрайва, который собственно и управляет разрешением работы всей периферии Магистр16 которая и отличает его от обычного МегаДрайва (детально его работа и вариант модернизации описаны ниже в соответствующем разделе). Вобщем, не так уж всего и много.

 

А вот дальше о том, что хотели добавить, но не добавили ...

ISA-шина? Разъем расширений - не Sega-SD и не ISA …

В сети распространено заблуждение, что дескать Магистр16 имеет в качестве «слота расширения», ни много ни мало а ISA-шину, что создавало перспективы его развития о которых заботился разработчик в момент проектирования этой машины. Это не так, от слова совсем!

По шине и разъемам в Магистре просто аццкий трешак какой-то. Разрабы печатной платы не планировали размещать ее в корпусе? А разработчики корпуса словно не знали конфигурацию платы ... Как так можно было сделать?!! См. фотку ниже ...

К боковому разъему слота невозможно ничего подключить! Факт!

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

Вспомним, что формально ISA - это стандарт, определяющий ассортимент сигнальных линий и протоколы (алгоритмы, тайминги и т.д.) их использования, а также распиновку разъемов где эти линии присутствуют. В Магистре от ISA нет ничего! Не поленился, прозвонил и нарисовал распиновку слотового разъема Магистра.

Видно, что "разъем расширения" Магистра - это сильно кастрированный разъем Sega-CD с парочкой контактов от "фирменных плюшек", на него выведена всё таже шина процессора m68k. Ровным счетом она же проходит через нераспаянные пятачки разъема нижнего отсека "под память" (об этом ниже). Хотя почему под память? Ассортимент внешних дополнений тут может определяться только их форм-фактором, а так разницы никакой куда в Магистре их вешать. А удобнее и оптимальнее (в плане полноты представленных сигнальных линий) на разъем классического картриджа, который в Магистре внутри также продублирован ...

Конструктивно полость внутри корпуса Магистра16 сосредоточена как раз напротив этого разъема, а на заднем торце наличиствуют две «шторки». Внутрь корпуса предусматривалась установка «елки»-разветвителя на две карты с внешними разъемами (по аналогии с ПК)? Похоже, но уж больно узкие они (заглушенные отсеки сзади) для плат с деталями, да и в корпусе нет никаких креплений ни для «елки», ни для плат ...  Так что отсек внутри корпуса можно использовать только как загашник: мышь или картридж спрятать можно :-)

Читал мысли что дескать модем подрубать таким диковинным способом предполагалась … Позвольте, для модема COM-порт есть у Магистра (хоть и не распаянный по-умолчанию), классика: не дать не взять.

Нычка под память?

Почему под память? Наверное просто похоже на подобное конструктивное решение, применяемое в ноутбуках например – а так тут/там пусто, даже разъемы коннекторов не распаяны. В разделе Доработок расскажу подробнее про данную затею. Также рядышком здесь притаились региональные переключатели.

Периферийные порты.

Клавиатура и мышь в предназначенных для них PS/2 портах функционабельны (в единственной фирменной софтине на комплектном картридже). Аналогично и LPT-порт с целью подключения принтера (с прямой печатью символов ASCII таблицы) должен вроде как функционировать (в качестве развлекухи для детей, наверное) – это все есть. А вот COM-порт для гипотетического подключения модема … шиш вам – не распаян полностью в части драйвера электрических уровней двуполярного интерфейса RS-232. Но ведь и поддержки модема (как и нуль-модема) в программной части также не представлено, так что не велика потеря. Но разъем-то зачем впаяли тогда, оставив висящим «в воздухе»? Вообще в очередной, но не в последний раз, ощущение что запаяли "что было", а остальное "не подвезли", т.е. дело не в жадности, а скорее-таки в раздолбайстве.

А при чем тут модем, спросит кто-нибудь? А что в 2000-м году можно было из периферии запланировать для подключения в СОМ-порт бытового компьютера еще? Не программатор же ;-))

Встроенный накопитель.

Нет, это не дискета, а распаянная на плате микросхема Flash-ROM – аналогичная применяемым на картриджах (перезаписываемых картриджах), подключенная непосредственно к шине и получающая сигнал разрешения функционирования от отдельного адресного декодера (маппера, реализованного на pal-логике 16v8).

По факту предусмотрена установка двух 8-битных микросхем памяти накопителя, но установлена лишь одна. Можно добавить? Можно! А зачем? Об этом ниже ...

 «Хардваре-кей».

Ну и в аккурат чтоб закрыть тему аппаратной начинки Магистра расскажу еще мысли об AVR-ке, притаившейся в уголке платы.

Распиновку прозвонил-нарисовал.

Рядом пустующее место (по принципу исключающего-или) под разные корпуса одного и того же микроконтроллера (ибо в параллель полностью за исключением NC). Этот контроллер с "внутренним миром" магистра связан тремя линиями с GPIO ногами Multi-IO - т.е. программно можно реализовать любой протокол обмена данными (из основной программы с программой в AT90S1200), ресетится он вместе с МегаДрайвом. Нераспаянные семь пятачков рядом (CON3), с учетом ассортимента линий контроллера на них выведенных - это вовсе не внешний интерфейс, а удобное средство внутрисхемного обновления прошивки в этом контроллере (классический шестипроводный AVR ISP). Т.е. это видимо приблуда встроенного назначения, напр.: "аппаратный ключ" или сопроцессор произвольного функционала (может контрольные суммы считает, файлы распаковывает, музыкальный контент обрабатывает и т.д. и т.п.) ...

Резюмируем …

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

«Magistr16 существует лишь во всей красе и сферическом вакууме своей операционной системы».

Если не выступать в роли разработчика и не прибегать к созданию нового (альтернативного) ПО, использующего расширенные аппаратные возможности, которые имеет Магистр16 относительно классического МегаДрайва – то остается довольствоваться лишь комплектным картриджем к нему.

Ну а по факту с одной стороны Магистр16 - это шедевр, с другой - железка с весьма ограниченным и замкнутым самом в себе функционалом неопределенного практического назначения (не считая конечно того, что это просто Сега МегаДрайв ;-)

Аналитика.

Здесь коснемся и попробуем оценить с прикладной точки зрения, пожалуй, самую масштабную «нахлобучку» предоставленную нам архитектурой Магистра:

Multi-IO чипсет.

Чтобы понять как программировать Multi-IO (управлять периферией к нему подключенной и встроенной), для начала вспомним что это за зверь, откуда он взялся и где применялся.

Ранние представители «IBM PC - совместимых» компов (архитектуры x86) имели многие компоненты в составе системной платы в виде дискретных микросхем (достаточно взглянуть на типичный ПК на базе i8086 или i80286). С эволюционным развитием, часть внешнего (подключаемого в слоты шин) оборудования с карт расширения перекочевывала также на мать (контроллеры накопителей и портов – яркий пример), а компоненты на матери «укрупнялись», количество корпусов снижалось. Чипсет Multi-IO – это однокристаллка, включающая в себя много разного-разнообразного что раньше было в рассыпухе, они до сих пор продолжают эволюционировать, обрастая все новыми и новыми функциями. При этом архитектура и порядок обращения со всем этим хозяйством обеспечивает обратную совместимость как с древними решениями на рассыпухе, так и с более новыми протоколами конфигурирования-взаимодействия-использования (как например plug-and-play). Все Multi-IO (или Super-IO) будучи разработанными для использования совместно с x86 архитектурой, понятно, что используют ее особенности – как основную (и актуальную в рассматриваемой теме) это отдельная «виртуализованная шина» портов ввода-вывода (сейчас бы это назвали именно так, тогда такого термина не было). За счет отдельных управляющих сигналов классическая шина x86 процессора (архитектурно предназначенная лишь для памяти) «превращается» на время в 8-битную шину портов ввода-вывода с пределом адресации до 64кБайт (16 адресных линий, сначала вообще было 10, сейчас вроде больше – не суть). Для работы с пространством портов ввода-вывода процессор имеет отдельные команды (in/out) … и т.д.

В Магистре применена Multi-IO созданная и применявшаяся в эпоху Пеньтиум-2 и матерях под этот проц. У архитектуры m68k никаких «виртуальных шин» нет – адресное пространство едино. Для использования Multi-IO от «чужой» архитектуры пришлось немного скорректировать набор управляющих сигналов (реализовано в 16v8) – но это мелочь. Кстати, внутренний боковой слот Магистра по ассортименту сигналов подходит именно для подключения устройств, ориентированных на «шину портов ввода-вывода x86» (хоть и линий запроса прерываний там нет даже в виде эмуляции таковых).

Так вот, о главном. На W83977 (как и на прочие подобные) есть весьма объемный даташит (см. приложение), но информация в нем не обладает полнотой, позволяющей написать алгоритм. Это в случае флэш-памяти: открываешь даташит, словно методичку, и пишешь код (там тебе и словами все расписано, и в табличной форме суть систематизирована, да еще и блок-схемы алгоритмов вместе с диаграммами таймингов). Но не унываем – исходники линуксовых дров или может ядра? А вот и нет! Это не уровень ни того и не другого! Пред тем как работать «со всем этим богатством» Multi-IO (тут самый низкий уровень по аналогии - это уровень классической DOS-программы) -  нужно эту микросхему проинициализировать … А в классическом ПК этот инициализационный функционал является частью кода POST (тот, что прошит во флэшку именуемую в просторечье биосом). Т.е. на уровне операционной системы (даже ее ядра) мы имеем дело уже с проинициализированной Multi-IO. А как её инициализировать - ни информации, ни тем-более исходников я не нашел. Биосы к матерям, как известно, пишут вообще всего буквально четыре компании в мире (AMI, Award, Phoenix, …). Так что путей несколько: дизассемблировать содержимое «биос» от второго Пня (с аналогичным Multi-IO); дизассемблировать фирменный софт магистра (его разработчики вероятно шли первым путем); анализатором сигналов снять дамп шины в момент инициализации (с 6 по 8 мегабайт) и потом, немного его причесав, «выстреливать» как «магическую последовательность». Длительный запуск фирменного софта магистра с комментариями внизу экрана похоже не для красоты – это реально инициализация происходит, что занимает время.

Без инициализации – Multi-IO не юзабельна. Это не какой-нибудь «примитивный» контроллер с фиксированной картой регистров. Если вспомнить ПК и классический BIOS-Setup, то там можно менять адреса многих компонентов (LPT, COM – порты в том числе) – так вот, после включения (без инициализации Multi-IO) походу они недоступны вообще ни по каким адресам! Еще вариант – это смотреть спецификацию PnP (в нескольких томах) и пытаться вытянув суть оттуда - инициализировать Multi-IO по ней … А там для каждого «модуля» (устройства внутри Multi-IO) предполагается заполонять (загружать) карточку профиля в стандартизованном формате. Не исключено, что флэшка Магистра (в виде постоянной своей части) содержит также и эти «карточки-профили» (а не «биос» в широком смысле, как там написано). Ведь изначально и формально под термином BIOS (базовая система ввода-вывода) понимались фрагменты кода обработчиков прерываний различных программных событий и состояния оборудования (в IBM PC и DOS) – а из 8-битной памяти в МегаДрайве код выполнить нельзя, копировать его в ОЗУ имхо бессмысленно, т.к. можно разместить на картридже а не заморачиваться из-за 19кБайт.

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

Но, в любом случае, инициализация Multi-IO не освобождает от последующей необходимости написания «драйверов» под проинициализированные компоненты уже в коде m68k. Мрак? Может лучше забыть идею заюзать этот чипсет?

Тогда перейдем к вещам техническим, задокументированным и соответственно более просто реализуемым …

Доработки.

Условием задачи считал использование возможностей, заложенных в Магистр16 при его разработке - а не путей его глобальной модернизации. Модернизировать лучше базовый МегаДрайв, а не это "чудо-техники". Поэтому, для начала, «допаяем» недостающее ;-))

СОМ-порт.

Распаял полностью недостающие компоненты COM-порта. Это что пазл такой был? Для кого? Могу понять, что от части функционала заложенного в печатную плату отказались при релизе изделия (так часто делают многие, тот же ASUS имхо лидер по нераспаянным компонентам на матерях даже в Делюкс-ревизиях). Но тут в Магистре припаяли сам разъем (оставив висеть его в воздухе, типа ширма?), установили повышающий преобразователь (MC34063) и частично его обвязку (он тоже фактически в воздухе висел "на холостом ходу"). Исправляем ...

Осталось припаять драйвер-конвертер GD75232 (именно этот, GD75323 не подойдет по распиновке, хоть и аналогичен функционально!), несколько диодов, емкостей и пару резисторов – что я и сделал. Резисторы по-хорошему нужно подбирать по номиналам для симметрии уровней (+\-). Сначала поставил оба 3кОм (знал что много, но чтоб точно не испортить чё), потом заменил на 300 Ом ... Реально походу нужно крайний ставить около 1кОм, а второй 100 Ом - но перепаивать уже лениво. Как-нибудь (если с несимметричными уровнями косячно работать будет) нужно будет найти подстроичники, выставить их по вольтметру, померить и впаять уже постоянки по результатам измерений ... Пока так.

10мкФ (аналогично тем что рядом), но имхо маловато (нагрузку слабо держат) – можно попробовать 47мкФ например. С диодами - шиканул, их просто много у меня: 1N4007 (высоковольтные, одноамперные - для ремонта блоков питания брал), а так и кд522 сгодился бы ... Резисторы 1кОм (скраю) и 100 Ом (ближе к диодам) – и измерить напряжение на крайних ногах преобразователя уровней еще до его установки (в идеале должно быть одинаковое по модулю). Да и не забыть скоммутировать залипухой отрицательное напряжение на данный узел (на верхней стороне платы рядом с разъемом СОМ-порта есть залуженная дорожка ... это еще один квест от разработчиков?). Получается типа этого ...

Как заюзать софтово этот ком-порт в своем (ведь другого нет) ПО? Изобрести еще раз с нуля космический корабль и полететь на нем на ... А если серьезно: "были бы спички, был бы рай", в нашем случае исходник или дока подробная (причем первое даже более вероятно найти, чем второе). А так я без понятия как инициализировать Multi-IO, ха-ха, хотя и не смешно ;-0

Расширение встроенной флэшки (накопителя).

Поставить обе микросхемы в кроватки! А вот и нет … Если внимательно присмотреться то стойка корпуса мешает установки одной из кроваток (или наоборот, не суть). Будем дорабатывать? Поглядел я так, оценил объем механических доработок и стойки корпуса, как вариант, а не только угла кроватки (чтоб не так глобально угол сносить у нее). Вобщем решил запаивать вторую микруху напрямую, без кроватки! И первую не выпаивать. Вот тут уж камень к разрабам не полетит - кроватки в серийные изделия не ставят ... Но это же прототип? - так тогда уж значит нужно было место по ZIF-панельку оставлять ;-p PLCC экстрактором конечно дергать еще то удовольствие, сноровка и осторожность нужна, однако …

А прошивать внутрисхемно флэш-память Магистра и проще, и быстрее, и удобнее - чем держать его открытым и перетыкать микруху (или даже две) в программатор и обратно (да еще и четные адреса с нечетными делить предварительно). Данный функционал реализован в рамках моего проекта расширенной версии утилиты управления программатором FlashKit (совместно с транслятором данных в виде «игры» в коде для МегаДрайва).

Манипуляции с «BIOS-частью» внутреннего накопителя.

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

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

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

Вопреки ожидаемому картина такова: ядро можно записывать хоть в четную микросхему, хоть в нечетную, хоть насквозь сразу в две в 16-битном режиме - разницы НИКАКОЙ! Размер равный размеру образа ядра будет обязательно пустовать: это либо другой четный/нечетный байт или оба (для 16-бит кусок следующий за ядром). Блок конфигурации (в адресации МегаДрайва) начинается всегда за удвоенным размером ядра биоса (для версии 2.09i - 0x00409800, для 2.12a - 0x00409000).

Размер блока конфигурации (заголовок "CONF") в адресном пространстве МегаДрайва всегда 256кБайт. Оба байта (четный и нечетный) будут от зеркалированы автоматически (за исключением когда ядро использует нечетную микросхему - в этом случае четный байт не используется конфигом).

Далее следует область FAT-накопителя (232448байт для 2.09i и 233472байта для 2.12а). И вот тут в любом случае содержимое четного и нечетного байта будет всегда одинаково (зеркально). Можно предположить что существует возможность "заставить" систему использовать 16-битный режим для области накопителя а не зеркалить его (байт в конфигурации? или патч на основную программу?) ...

Добавлю также, что флэшки скоммутированы в магистре через задницу! - у них все сигналы общие кроме линий данных, и чип-селект один на двоих: что крайне неудобно. Алгоритм записи W29C020 архи-примитивен (и не потому что эта модель до 2000-х годов была еще выпущена, это типа особенность её такая - вот PA28F400, что во взломщик я ставил еще более древняя, а управление там сравнительно классическое). Так вот, W29C020 очень похожа на FRAM: запись прямая, без всяких управляющих последовательностей, как в ОЗУ практически - только загружать на запись нужно всю страницу размером 128 байт (т.е. если нужно записать байт - то читаешь страницу его содержащую, вносишь изменение и записываешь обратно, стирать предварительно ничего не нужно - все автоматически, только задержку выжидаешь, т.к. внятных битов статуса тоже нет). Единственно нужно делать вначале единственный раз команду анлока массива. С одной стороны удобно, с другой - проблематично при изложенной выше схемотехникие Магистра записать четную или нечетную часть отдельно, поэтому реализовал только полную 16-битную запись.

Для манипуляций с четными/нечетными кусками использую эту софтину https://www.romhacking.net/utilities/1621/ 

Биос (ядро, см приложение) "оформить" для записи проще-некуда: как душе угодно записываешь в начало: хоть любой одной, хоть двух микросхем, хоть в 16-битном режиме ... хвост пустым оставляешь, он сгенерируется сам при запуске.

Обновленный маппер.

Походу изучения начинки Магистра ознакомился с некоторыми «архивными материалами», в которых был найден исходник алгоритма маппера, реализованного на pal-логике 16v8 в виде текстового файлика. Синтаксис в нем вроде хоть и так понятный – но нагуглил небольшую доку в помощь по данной теме (https://class.ece.uw.edu/475/peckol/doc/cupl.html), а сами исходники см. в приложении.

В итоге стало ясно, что с обычным картриджем в слоте (у которых в 100% случаях сигнал /Cart – B32 вешается на землю) всё доп. оборудование магистра напрочь отключается! (GE неактивным становиться). Имеем обычный МегаДрайв, о доп. фишках софту не догадаться, ни воспользоваться ими. Вспомнил и то, что на «родном» картридже сигнал /Cart висит в воздухе (такое еще встретишь только на RAM-Cart к Sega-CD - но это картридж с данными а не программой, как в случае с Магистром). Что делать? На какой картридж шить/загружать самопальный софт под железо Магистра? Сначала подумал что раз Эвердрайв умеет эмулировать RAM-Cart, то значит можно изменить сигнал на B32 программно, дав команду его «железу» … но это недокументированная его функция, и как это сделать я пока не знаю (в инете также пусто по этой теме). Значит нужно «плясать от слота». Поставить тумблер на данную линию? Стал смотреть разводку платы – изящно этого не сделаешь … И тут я вспомнил, что у меня есть несколько штук 16v8. Да! Значит я должен написать новый маппер для Магистра – Ура, кажется я нашел изящный и наверное правильный выход из казалось бы тупиковой ситуации поставленной задачи.

Теперь нужно было понять «с чем едят» этот исходник, т.е. чем компилировать, прошивать … Вобщем в итоге выяснил, что у этого текстового файлика расширение должно быть *.pld, а еще должна быть шапка с указанием модели микросхемы чтоб компилировалось и на выходе получался нужный нам файлик *.jed. А прошивать просто – MiniPro (TL866) это умеет. Итого имеем чуток облагороженный исходник и его скомпиленный вариант. А софт для сборки называется WinCupl (ныне официально бесплатно доступный на Атмеловском сайте).

На следующий день запланировал распайку Магистра под установку кроватки под 16v8 и попутно обмозговывал варианты модификации логики с целью как сохранения полной обратной совместимости с «фирменным софтом», так и (переключаемой или нет?) возможностью заюзать доп. железо в своем софте без ущерба работы обычных картриджей, не подозревающих о доп. оборудовании (если переключать нечем будет – т.к. лишняя колхозная пайка имхо нежелательна).

Вобщем кровать установил без нюансов, вопрос технический (хоть и повозился). Дальше решил проверить работу напрямую собранного варианта маппера из исходника в новой микросхеме (ведь визуально дамп стоковой микросхемы и результат компиляции хоть и не сильно, но отличаются). Зашил, воткнул, включил … И хрен! Типа «ошибка инициализации BIOS» (в то время как дамп записанный в новую микросхему – работает исправно). В чём косяк?

Разбираться в исходнике хоть и понимая что в нем написано, но не представляя чего конкретно не хватает фирмовой софтине – тема неблагодарная. Сразу накатить придуманный мною патч? Стал анализировать куда и что, и вдруг случайно понимаю что (вероятно разработчик решил «пошутить» или проверить компетенцию того кому он исходник отдал, чтоб тупо его не компилировали и исказил код) в одной строчке лишняя инверсия! (GE = _KEY должно быть). Всё стоковый функционал из исходника получен ;-)

Теперь задуманный «дебаг-фиксинг». Так как ног свободных в нашем случае у 16v8 нет, и как я понял триггеров в ней тоже не забабахаешь (хотя могу и ошибаться) – то навскидку включение/отключение программное или аппаратное (с минимумом пайки) не сделаешь. Значит решил активировать доп. оборудование напрямую в режиме обычного сеговского картриджа (с заземленным /Cart). Но сделать это нужно так чтоб не мешать играм под штатную архитектуру. Вобщем, т.к. Sega-CD к магистру подключить априори невозможно, то в режиме стандартного картриджа можно весь второй четвертый мегабайт смело отдавать под «магистровские штучки» (как оно и есть), да и лишнюю оперативу вместо зеркал также включить легко (кто не знает о ней мешать не должна). Единственно что пришлось отказаться от поддержки «сквозных» (линейных) картриджей превосходящих штатный объем 4МБайта (до 8- или 10- Мбайт которые) – но это и так нестандартное решение, хоть и мортал-комбаты кастомные и бэдэплы работать теперь на таком Магистре не будут (с SSF без проблем как и раньше).

Вот. Исходник и его компиляцию прилагаю. Результатом доволен. Теперь можно писать код на обычный картридж и юзать железо Магистра в полной мере. Память ОЗУ в расширенном виде теперь 0xFC0000 – 0xFFFFFF (и кратные зеркала ниже до 0xE00000), флэш как и положено 0x400000 – 0x47FFFF (по четным адресам в стоке, впаяешь второю – будет и по нечетным) и далее зеркала до 0x5FFFFF, в части мульти-ИО в исходнике тоже ошибка допущена была (в комментарии – там пространство с шестого по восьмой мегабайт 0x600000 – 0x7FFFFF, а не с седьмого …)

Немногим позже конфиг маппера был еще немного «допилен»: вторая строчка "фиксинга" (где CS) избыточна (хоть и не мешает) с учетом какстрированости  Магистра, как оказалось, в части функционала свопа адресных пространств: нога /Cart у SM801 наглухо припаяна на землю! Со слота картриджа /Cart поступает только на 16v8 чем лишь обеспечивает включение доп. периферии Магистра (со стоковым конфигом PLD) - учитывая это конфиг PLD можно еще больше упростить (я скорректировал так, что подразумевал наличие свопа). И хоть в полное отсутствие даже намека на к.л. возможность подключения к Магистру Sega-CD вроде как переключение адресных пространств и некчему ... но все равно имхо жаль заземлили ножку. Запустить программу со встроенной флэшки (расширив ее до 16-бит в случае установки второй) не получится :-( Также и разводка под второй слот - не более чем место иного его геометрического расположения, селектировать их задача нетривиальная уже ...

Но есть и позитивная сторона. Фирменную программу магистра можно записать и запускать с обычного флэш-картрджа (или с Эвердрайва), а с пропатченным маппером даже без "заклейки" B32 ;-)

Да, и еще: «разрабы» напортачили в исходнике маппера и с нумерацией старших линий адресации доп. расширения основного ОЗУ! С одной стороны конечно пох, если память пишет и читает только "твое железо" - как ты там ноги адреса скоммутируешь, хоть бы и рандомно перетасуешь их между собой! Но все же так не делают, а пользуясь документацией соединяют именно одноименные адресные линии. Разрабы Магистра накосячили и тут - причем чисто софтверно (на уровне конфига PLD). На работу такое разнобойное размещение данных в памяти не влияет (наверное), а вот для понимания и дальнейших разработок - негуд. И вот она - очередная (пока финальная) версия конфига.

Модуль расширения (на дне).

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

Пока занимался маппером стало интересно назначение и разводка его последнего оставшегося до сих пор без внимания входа /DRAMON. Прозвонил и срисовал распиновку отсека на дне.

Там сигналов побольше, и адресная шина целиком. Но! Разработчики опять сглупили - не вывели сигнал /DTAck. При его наличии можно было бы использовать свободный 11-ый мегабайт адресного пространства (как и с 8-го по 10-ый), а так только первые восемь. А вернее четыре - т.к. с четвертого по восьмой уже забито (очень расточительно и неразумно) имеющейся периферией Магистра. Маскировать основное адресное пространство картриджа (первые 4Мбайта) под оперативу (установив ее в донный отсек) - имхо так себе затея, снижает удобоюзабельное пространство для программ + совместимость вообще никакая, а ведь нужно еще как-то это селективно включать? Короче, сигналом /DRAMON должен управлять модуль памяти в отсеке, тем самым отключая картридж в слоте, когда он планирует встать на его адреса (а это всего лишь эти самые 4Мбайта - в других случаях /CE0 и так не активен).

Ну если только в качестве "донного модуля" будет а-ля картридж с ПЗУ - тогда да. Донный модуль, когда его вставишь, может отключить картридж в слоте и выполнять в себе размещенный код (если это не только ОЗУ). А может свой маппер содержать ...

И под завязку в качестве точки - Операционка.

Так, что еще? Интересная штука операционка Магистра конечно, только без её исходников ... хотя, да хрен бы с ними: без API, без SDK и т.п. (если аналогию с виндой проводить) - приложение в её стиле под неё не создашь (как под винду), используя уже имеющийся интерфейс, а жаль. А так просмотрщика картинок (и слайд-шоу) нет, музыку свою не подсунешь с дискеты, да и редактор текста даже по меркам досовских nc\vc или линуксового mc слабоват. Но работа с FAT на дискете и даже на встроенной флэшке впечатляют конечно, как и парсинг gif-картинок (в SGDK такого нет). Эх :-\

Приложение.

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

  • «BIOS» - версия 2.09i и 2.12а
  • Софтина для записи встроенной памяти (где биос) без выпаивания микросхем
  • Исходник доработанного маппера 
  • Подборка даташитов на микросхемки в Магистре
  • Дамп штатного картриджа

Чего-то забыл? Пишите, дополню ;-))

MiGeRA (октябрь 2022)

Заглавная » MegaDrive » Magistr16 – «дисководная сега»