Локальная копия помершего сайта Романыча
SegaSecret.narod.ru
Вы попали на страницу Аппаратчика Романыча, которая посвящена игровой приставке SEGA MegaDrive (Genesis). Благодаря огромному неравнодушию Романыча к этой приставке, появился этот сайт!
Здесь я буду размещать свои проекты (некоторые с исходниками) - железо и программы для СЕГи, а также спец-утилиты, давать ссылки на другие полезные ресурсы.
Итак... поехали!
1. Ностальгия по приставочному деЦЦтву.
Когда я учился в третьем классе начальной школы (90-е года), отец за хорошую учёбу подарил игровую приставку Dendy (модель Hitex). Вдоволь наигравшись в Battle City (единственная нормальная игра на картридже, который входил в комплект приставки) стал искать другие картриджи. В общем дофига чё переиграл, некоторые прошёл, но шедевры не забываются никогда! Перечислю их (что помню): Mario, Turtles 2, Turtles 3, Battle Toads, Battle Toads & Double Dragon, Felix the Cat, Contra, Over Horizon, 3 Eyes, Adventure of Island 3, Kage, Batman и многие другие! В них можно играть бесконечно!!!
Но не всё вечно - в конце 90-х годов приставка стала сыпаться. Вначале сломались джойстики, но это поправимо - на рынке купил новые, правда пришлось паять, ибо Hitex не имеет внешних разъёмов и распиновки отличались - перебрал методом тыка :) Затем модулятор сломался, так как часто лазил туда во внутрь, чтобы настраивать каждый раз на новые телики (ходил с приставкой по знакомым и родственникам, настройка некоторых телевизоров не перекрывала частоту канала приставки). Композит и аудио в Hitex'е на разъёмы выведены не были, да и в электронике тогда особо не разбирался :)
Всё кончилось тем, что Dendy перестал функционировать - я его выбросил, а картриджи подарил одному хорошему другу. На этом история деЦЦтва с настоящими железными приставками заканчивается.
2. ЭМУ-вспышка.
Где-то на третьем курсе (когда уже умел писать на Pascal и Ассемблере для x86) узнал, что есть средства для разработки программ для приставок (меня интересовали NES, SEGA MD, SNES). Нашёл доки по программированию. В то время ничего систематизировано небыло - вся инфа была представлена в виде огрызков на иностранных языках, а нормальных компиляторов языка Си практически небыло - глючили по-чёрному! Решил осваивать Ассемблер приставок. Писал немного (совсем немного!) на NES-ассемблере - меня хватило только на вывод спрайта и программирование звука. Далее забросил, так как сам процесс написания программы на Ассемблере - очень утомителен! Хотелось не просто какую-нибудь дему, а нормальную игру!!! Учитывая ограниченность ресурсов NES, по сравнению с другими приставками, компилятора Си не видать :(
Затем стал смотреть в сторону SNES. Показалось слишком сложной, единственно что сделал - закрасил экран константой и сделал fade. Кодил на Ассемблере. Компилятора Си не нашёл. Забросил.
Ну и наконец - SEGA! Привлекло то, что есть русский перевод документации и возможность заполучить настоящую СЕГу (на отдельных микросхемах) от младших братьев знакомых (они давно пересели на ПэЦэ, а СЕГу закинули подальше). Начал кодить на Ассемблере - написал простейшую программу Konfiti - сверху валятся разноцветные кружки под примитивные звуки FM-синтезатора. Всё! Дальше опять утомило. Озадачился поиском Си компилятора. Нашёл SGCC. Оказался очень глючным - много чего не поддерживает и аргументы функций задаются странным образом. Все экзамплы к нему работали, а вот мои программы - нет. Забил.
3. Когда уже покрепчал.
Не так давно, анонсировав Digital Thresher, озадачился написанием своих игр. К этому времени очень уверенно пишу на Си, познал ARM'ы и BlackFin, владею навыками построения современных вычислительных систем. На ПэЦэ пишу под DOS, работаю напрямую с железом. Перевожу CPU в защищённый режим или пользую DPMI. Программирование под Win32 на уровне API - не знаю, максимум способен на применение Delphi + VCL или сборку чужих проектов на VC или MinGW.
В общем не катило никогда программирование на ПэЦэ - ибо он мастдай и убог своей архитектурой! А главное - разношерстен!!! Сколько в мире существует звуко- и видео- карт? Между прочим, PS/2 мышь и клавиатура умирают, LPT умирает... Умирает всё то, что хорошо известно и полезно для ПэЦэ и не только для него :(
А это значит, что программа, которую я напишу на ПэЦэ, будет безупречно работать только у меня под DOS'ом (или Win98 на худой конец) и с оригинальными железками. С Win32 API практически не лучше - то дрова кривые, то конфликты за ресурсы... Сейчас ПэЦэ воспринимаю как рабочую лошадь - печатную машинку для написания программ и полигон для тестирования на эмуляторах. Не хочу программировать на ПэЦэ для ПэЦэ! Ненавижу ПэЦэ!!!
И тут в голову пришло! НУЖНО ПИСАТЬ ПОД СЕГу!!! Преимущества: есть настоящая рабочая SEGA (купил за 300р у одного паренька), самодельный картридж на 1МБ (из двух Flash микросхем), программатор на работе (самому сделать программатор лениво), часть документации (некоторая переведена на русский), обилие ресурсов в Интернете. Дальше стал искать нормальный Си компилятор. SGCC по причинам, описанным выше не устроил. TomSoft SEGA Kit - также не устроил - из-за узкоспецифичности (много мусора в исполняемом модуле, чужие копирастия). Выбор остановился на XGCC - это GCC для M68k - прекрасный компилятор с развитым синтаксисом, практически полноценный (обнаружил, что локальные static-переменные внутри функций не поддерживает, что немного неудобно), глюки пока не обнаружены.
В итоге убиваем четырёх зайцев сразу: программа запускается под DOS- эмуляторы SEGA, под Win32- эмуляторы SEGA, на Digital Thresher и на реальной СЕГе!!!
4. Минимальный набор инструментов и документации для написания программ для SEGA.
1) Пакет XGCC
2) Текстовый редактор желательно с синтаксической подсветкой (использую Bred)
3) Утилита BMP2Tile (облегчает резку графики на тайлы-спрайты, но ручками придётся дорабатывать!)
4) Редактор карт уровней Mappy
6) Растровый графический редактор (использую Paint)
7) Технический обзор SEGA Genesis (русский перевод)
8) Genesis Software Manual (на иностранном языке, более полная информация, чем в doc-переводе или html-версии)
9) Эмулятор SEGA с возможностью просмотра ресурсов приставки и отладки (использую Gens KMod)
Пожалуй пока всё. За кадром остались редакторы звука, но я серьёзно за них ещё не брался, от того и не пишу.
5. Знакомство с плодами фантазии Романыча.
Однажды, программируя под ПэЦэ, решил написать небольшую программу, которая выводит спрайт на экран. В качестве спрайта хотелось взять что-то своё. Решил нарисовать жабу (навеяно игрой Battle Toads и своими комиксами про жаб). Нарисовал голову. Дальше надо было дорисовывать всё остальное (90%). Обломало. Затем вспомнил, что брат ради прикола иногда рисовал жабу так - к башке цеплял лапу и всё!!! Без никакого туловища и остальных конечностей! Получалось быстро и главное смешно и весело. От делать нефиг, решил нарисовать нечто похожее на ПэЦэ в Paint'е. После двух часов блуждания мыслей в мозгу вот что получилось:
Изображение получило название Gluk Zhaba (Глюк-Жаба, ранее - Глюкавая Жаба). Про неё были выпущены несколько игр под ПэЦэ (которые не у всех шли как надо). Ну например, вот эта (самая непривередливая версия - работает даже на WinXP).
Затем, когда была сделана первая МикроМашина, нужен был новый герой игр, так как Gluk Zhaba занимала много места на экране 128x128. Был придуман Zhabik (Жабик), который представлял уменьшенный вариант Глюк Жабы и является её младшим братом (не сыном!):
В отличие от Глюк-Жабы, Жабик не мог выпучивать глаза (см. игру BigZhaba), зато мог менять своё лицо. Сей герой популярен на портативных самопальных игровых консолях Романыча. Про него также была выпущена игра для MicroMachine и Advanced MicroMachine, которая портирована под DOS.
Далее собственно, по мере развития возможностей Романыча, Жабик поматерел - покрылся пятнами, дизайн переработан:
Этот спрайт используется также как логотип Advanced MicroMachine и Digital Thresher. При включении сих аппаратов он выводится вместе с краткими характеристиками железа. Логотип также указан в двух местах на печатной плате Digital Thresher.
Ну и собственно, последний на сегодня шажок - новый дизайн Глюк-Жабы для СЕГи:
Это изображение было порождено от следующего скана рисунка, нарисованного от руки:
Следует отметить, что реально Глюк-Жаба имела ещё и другие дизайны, которые были не совсем удачные, поэтому официально не зачтены!
6. Как Романыч стал Сегоидом.
Тщательно проработав последний (на настоящее время) дизайн Глюк-Жабы, решил под СЕГу написать небольшую демо-программу в целях освоения железа СЕГи программирования на XGCC.
Демка IMHO вышла на славу, задействованы почти все нужные для игры ресурсы приставки (кроме FM-синтезатора).
Таким образом Романыч стал Сегоидом (ударение на первую букву "о"). В дальнейшем хочу написать небольшую игру для СЕГи про Жабу и Жабика.
А пока вот исходники демки. В архиве лежит также собранный исполняемый модуль ZZD.bin для запуска в эмуляторе или прошивки в картридж. Для собственноручной сборки проекта необходимо поставить XGCC и настроить его переменные окружения. Затем после перезагрузки ПэЦэ, запустить Build.bat - и внимательно читать сообщения на чёрном экране! До сборки старый ZZD.bin стирается и после линковки создаётся новый. Если он не создался, то XGCC установлен неверно.
Проект писался в целях познакомиться с железом СЕГи и опробования Си компилятора XGCC. Поэтому комментариев почти нет, исходные тексты программы написаны "как мне удобнее".
Программа проверена Романычем на Genesis Plus, Gens KMod, Fusion, Digital Thresher и на реальной СЕГе!!! Всё пашет как надо. На реальной SEGA MD темп программы чуть замедлен (из-за синхронизации по кадровому прерыванию 50Hz PAL вместо 60Hz NTSC).
7. Ближе к железу.
Отладив демо-программу под Gens KMod, решил посмотреть её работу на реальной приставке. Прошил Flash-микросхемы картриджа и запустил СЕГу. Программа безупречно заработала с четвёртого раза. В первый раз - стартап почикал некорректно, второй раз - взял стартап с ненужным мусором, в третий раз - был мусор в VSRAM - нужно было очистить, в чётвертый раз - всё как надо! Вместо AM29F040 можно брать другие совместимые по распиновке микросхемы ПЗУ (даже меньшего объёма).
8. Скриншоты Zhaba & Zhabik Demo (c) Romanich 2009.
Эмулятор Gens:
Digital Thresher:
Реальная SEGA MegaDrive:
9. Фотки / Ролики по теме.
ZZD.bin на Digital Thresher YouTube
ZZD.bin на SEGA Genesis YouTube
Картридж:
Плата SEGA:
SEGA в работе:
10. Модернизация СЕГи: поддержка PAL60
Здесь я расскажу о том, как модернизировал свою СЕГу для поддержки режима PAL60. Всем известно, что частота кадров в режиме PAL 50 Гц. СЕГА также может работать в режиме NTSC с частотой кадров 60 Гц.
Для чего это было нужно:
1) Изображение в NTSC вытянуто по высоте почти до краёв экрана (PAL плющит изображение, оставляя очень большие бордюры на экране)
2) Частота кадрового прерывания в NTSC на 20% выше, а значит темп процессов (которые завязаны на прерывание) в программе быстрее
3) Почти одинаковый Aspect Ratio с эмуляторами
4) Более точная совместимость с Digital Thresher (там эмуляция NTSC)
5) Поддержка NTSC ROM'ов
6) Получение некоторого опыта (как технического, так и в освоении приставки)
7) Менее вредно для глаз (60Гц против 50Гц). Я например краем глаза вижу мерцание экрана на 50Гц
По понятным причинам ИСТИННО NTSC приставку делать нет смысла, ибо телевизоры у нас PAL'овские. Но ничто не мешает сделать развёртку кадра 60 Гц, что соответствует NTSC стандарту, а цветовую поднесущую оставить PAL'овскую - 4.4336 МГц. В итоге получим гибрид NTSC развёртки и формирование видеосигнала PAL. Полученный режим условно называется PAL60, указывая на то, что частота смены кадров - 60 Гц, остальное всё как в истинном PAL (PAL50).
ВНИМАНИЕ!!!
Если вы не уверены и руки растут не откуда нужно или недостаточно знаний / опыта, а также если вы не склонны идти через трудности и дожимать при этом до конца, данный эксперимент проводить не рекомендуется! Очень легко сделать приставку неработоспособной или вообще вывести её компоненты из строя!
Шаг 1. Выпаиваем перемычку на ноге 46 VDP и ставим штырьки для сменной перемычки (Jumper).
Было:
Стало:
Как видно из первой картинки, товарищи китайцы просто запаяли перемычку для режима PAL и всё. Мы же поставили штырьки и надели сменную перемычку в другое положение (вторая картинка).
Если перемычки не будет, то VDP также будет в режиме NTSC (но висячку лучше не допускать, любая помеха будет дёргать VDP). Режим можно переключать налету.
Включим приставку... И что мы увидим?
А вот что:
Изображение растянулось в высоту, Aspect Ratio близок к эмуляторам, более нормальное восприятие (не сплющено), бордюры вверху и внизу стали едва заметными. А также движение Жабика, Жабы и темп звуков стал чаще. Но всё портят вертикальные полоски и отсутствие нормальной цветопередачи!
Причина кроется в том, что частота поднесущей цвета стала сильно отличаться от 4.43 МГц (очень важна точность значения этой частоты при приёме на PAL-телевизор, иначе изображение будет с глюками цвета или вообще чёрно-белым). А отличается она потому, что у VDP в режиме NTSC другой делитель опорной частоты (опорную частоту в приставке даёт кварцевый осциллятор 53.203424 МГц), нежели чем в PAL, поэтому на ножке 50 VDP в режиме NTSC частота поднесущей другая! И эта частота идёт на кодер PAL.
Шаг 2. Меняем кодер.
Напрашивается вывод - давать частоту 4.43 МГц с другого генератора, но товарищи китайцы предусмотрели на плате только место для кварца:
На картинке место под кварц в виде прямоугольника (внизу, справа от трёх одинаковых резисторов). Правее от кварца - ещё место для конденсатора. В голову приходит мысль поставить кварц на 4.43 МГц и подстроечный конденсатор 8/30 пФ. Так и сделал. Дополнительно впаял штырьки и надел сменные перемычки - скоммутировал кварц и выбрал источник поднесущей - кварц.
Но ничего не вышло - цвет вообще пропал, сколько бы не крутил подстроечный конденсатор! Всё оказалось очень просто - после просмотра даташита на кодер MB3514 пришёл к выводу, что данный кодер требует внешнего генератора (а не один кварц!) для цветовой поднесущей! Китайцы же, не предоставили места под генератор, в итоге пришёл к выводу о замене кодера на CXA1145 (который собственно и должен был стоять в приставке!!!).
В магазине нашёл CXA1145P (в DIP корпусе). Аккуратно выпаял старый кодер MB3514 (он убогий!!!) и конденсатор между первой и пятой ногой кодера (на фотографии у него ёмкость "101" - 100пФ). Запаял CXA1145P, также заменил некоторые электролитические конденсаторы сомнительного вида. Конденсатор между седьмой и десятой ногой кодера ("821" - 820 пФ) нужно оставить - он убирает ненужные составляющие сигнала CSYNC (в некоторых играх при отсутствии этого конденсатора замечено подёргивание экрана и мерцание некоторых его областей чёрным цветом).
Получилось вот что:
Справа от кварца ещё впаял конденсатор на 30 пФ (жёлтого цвета). Сменная перемычка слева коммутирует кварц - в нижнем положении кварц подключен. Сменная перемычка справа выбирает источник сигнала поднесущей цвета (кварц / VDP) - в нижнем положении источник сигнала - кварц. Самая крайняя перемычка (ещё правее) выбирает режим работы кодера - запаяна в нижнее положение - режим PAL. Конденсатор, фильтрующий CSYNC, припаял на обратной стороне платы.
Тщательно промыв спиртом плату от остатков припоя и флюса (я не пью, поэтому не жалко! :), проверив монтаж, включил приставку. И что мы видим:
Цвет вернулся! Также видно, что изображение стало более чётким, что в пользу кодера CXA1145. Мало того, заметил что громкость звука почему-то возросла примерно в 1.5 раза! Звук также без замечаний.
А теперь сравните с режимом PAL50:
Не правда ли PAL50 убог? ;)
Замечено, что в режиме PAL50 громкость звука на телевизоре чуть тише, чем в режиме PAL60. Возможно из-за особенностей управляющего ПО телевизора.
В режиме PAL50 кодер CXA1145 также нормально функционирует и от VDP-поднесущей.
Палата СЕГи после модернизации (также поменял все электролиты, поставил феритовые бусины по питанию):
Видеоролик, где я налету меняю режим PAL50 на PAL60 (меняется сменой положения перемычки, которая коммутирует 46-ю ножку VDP). На ролике даже видно, что экран в режиме PAL50 мерцает, в отличие от PAL60.
11. Недоделанная игра
Ресурсы проекта (спрайты, карты плоскостей).
Управление: U,D,L,R - передвижение, Start - пауза, A - стрельба патронами, B - смена патрона.
В игре 4 фона (меняется через определённое время), боковые стены без повторения!
12. Переделка приставки под чистый NTSC
Оказалось, что не все телевизоры поддерживают режим PAL60. Гораздо вероятнее поддержка чистого NTSC (несущая 3.57 MHz).
Что нужно было:
1. Впаять ещё один переключаемый джампер (меняет режим кодирования PAL/NTSC)
2. Поменять кварц 4.43 MHz на 3.57 MHz
3. Убрать конденсатор 30 пФ (на моей плате - жёлтый) и поставить подстроечный 8/30 пФ (на моей плате сзади)
После такой переделки все телеки стали отображать цвет корректно!
С наилучшими пожеланиями,
Romanich
Это всё что удалось сахранить с этой странички . Версий игр про жаб для PC у меня не сохранились .
Полезный утиль для самодельного картриджа .
DIV_EObyCaro.zip - программка для распиливания 16 битных прошивок на две восьмибитные .