Эмулятор CD-Rom для SonyPlaystation который я писал больше десяти лет. Часть 1

в 13:52, , рубрики: diy или сделай сам, PS1 PSX CXD2545
Эмулятор CD-Rom для SonyPlaystation который я писал больше десяти лет. Часть 1 - 1Давным-давно у нас городе был игровой клуб на несколько SonyPlaystation. Где я очень по многу зависал. Там я полюбил PS1 и игры на неё. Использования CD-Rom в качестве носителя позволила привнести в игры ошеломительные по тем временам видео вставки, CD музыку в качестве оформления игрового процесса, возможность делать игры многодисковыми(с картриджами такого вроде не проворачивали), что был несомненный плюс. Но и привнесло один минус, а именно деградация лазера привода. И если в домашних условиях, возможно, это была и не большая проблема, то в игровом салоне умирали они раз в 2-3 месяца. Вот ещё там у меня родилась идея сделать эмулятор CD-Rom. И через очень много лет я таки исполнил свою мечту.

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

PS. я знаю про существование psio, и эмуляторы консолей, но мне был интересен процесс.

Эмулятор CD-Rom для SonyPlaystation который я писал больше десяти лет. Часть 1 - 2

1. Попытка первая, изучение схемы

В общем двадцать лет назад там где я жил интернета, можно сказать не было. Найти в нем, что-то тоже было сложней. Но тогда были достаточно интересные книги. Одну, из которых мне и удалось раздобыть. А именно «Игровые приставки. Ремонт и обслуживание». Где и была найдена схема PS1. После изучения схемы, а ещё и под влиянием того, как она была разбита в этой книге, в голове созрела мысль, что проще всего «эмулировать» микросхему CXD2545.

Схема из книги(в схеме есть ошибки но сейчас это не важно)

Задача не казалась особо сложной и сигналов, которые надо было эмулировать, было не так и много около пятнадцати. Мне казалось, что приставка посылает управляющие команды, а этот чип выдает данные с нужного сектора компакт диска. В целом я был не очень далек от правды. Добравшись до интернета, я смог найти даташит на CXD2545. Правда, в очень ужасном качестве, в виде очень кривого скана с бумаги. Но в целом стало понятно для чего нужны все сигналы, и примерный протокол их работы. Потом я увидел список команд, которые понимает этот чип, и понял, что не осилю. Так как на тот момент помигать светодиодом на AVR был подвиг. Ну и у меня не было самой PS1, и мощной AVRки тоже не было. И так идея ложится в долгий ящик первый раз.

2. Попытка номер два, через много лет

Всё что описано дальше актуально для плат с низкой степенью интеграции SCPH-5XXX и ниже.

2.1 Что предстоит эмулировать

Прошло много лет, я успел поработать админом, обзавестись паяльной станцией, платой DE1 от Terasic, логическим анализатором и самой PS1. И время от времени на ней поигрывал, но во в ней таки додох лазер, так что FF IX я пройти смог, а финальную заставку смотрел уже на ютубе. Потому что, вот не могла она прочитать заставку финальную, хотя на PC диск читался идеально. И тут вспомнилась давняя идея. И после непродолжительных поисков в инете был найден уже в нормально качестве даташит на CXD2545. И также стало понятно, что именно надо делать со всеми(почти со всеми как я ошибался насчет SENS) управляющими сигналами. Все сигналы можно разделить на: передачу данных, передачу данных субканала, статусные и управляющие:

Передача данных:

Пин Название Предназначение
47 CDBCLK Тактирование данных
45 CDLRCK Данные какого звукового канала передаются, левый/правый
46 CDDATA Сами биты данных
56 С2PO Указание на наличии ошибки в блоке данных
72 EMPH Аудиоданные были подвержены предусилению/предискажению

Передача данных субканала:

Пин Название Предназначение
78 SQCK Тактирование данных
77 SUBQ Биты данных субканала
74 SCOR Выдает импульс при поступлении новых субканальных данных(не совсем верно но об этом потом)

Статусные сигналы:

Пин Название Предназначение
80 SENS Очень мудреный статусный пин, на которые выводится очень много сенсорной информации.
83 SCLK Иногда работает в паре с SENS(реально не видел такого)
— (SSTP) CS(в книге) Используется чтобы понимать что каретка привода пришла в нулевое положение

Управляющие сигналы:

Пин Название Предназначение
88 CLOK Тактовый сигнал шины команд.
86 DATA Биты данных для управляющий команд
87 XLAT Защелкивание команды в регистре управления

Есть ещё некоторые сигналы но они не особо интересны и нужны(ну по крайней мере сейчас).

2.2 Логический анализатор, и анализ полученных данных

Эмулятор CD-Rom для SonyPlaystation который я писал больше десяти лет. Часть 1 - 4

2.2.1 Подготовка

Сигналы, которые нужно было поглядеть, были известны. Как они должны выглядеть было написано в даташите. Теперь оставалось проверить, как оно всё выглядит на самом деле и как приставка общается с этим контроллером. И тут надо сказать отдельное спасибо инженерам Sony. На плате приставки огромное количество тестовых точек. На которые выведены почти все интересующие сигналы. Покопавшись в интернете были, найдены фото в высоком разрешении верхней и нижней сторон платы. Которые сильно упростили поиск нужных тестпоинтов. Распаял кучу проводов, которые затем вывел на колодку типа IDC и приступил к изучению.

Впечатлительным лучше не смотреть

Эмулятор CD-Rom для SonyPlaystation который я писал больше десяти лет. Часть 1 - 5

После всех приготовлений, было снято несколько образцов работы сигналов. Всё что было использовано выкладываю на здесь, открыть логи можно при помощи фирменной утилиты от анализатора DSLogic. Но надо учитывать, что по каким то причинам которые я уже не могу вспомнить, хотя анализатор и 16 канальный я не делал захват линий данных с сидирома. Возможно мне показалось что там в принципе нет ничего интересного. Поэтому смотрите аннотацию сигналов где что. Также следует учитывать что у меня оказался убит седьмой канал на анализаторе поэтому сигнал SCOR хватался не криво и через раз, но это не особо мешало.

2.2.2 Анализ

Для начала я захватил событие чтение оглавления диска(TOC) на двух дисках. И посмотрел что получилось.

Начнем с данных ибо тут никаких сюрпризов не было. Мы должны видеть вот такую картину:

Эмулятор CD-Rom для SonyPlaystation который я писал больше десяти лет. Часть 1 - 6

Сигнала WDCK у нас не используется. А так имеется 24 бита сигнала, на каждый канал, записанные от старшего к младшему, при этом первые 9 бит одинаковы. Мне кажется что первые 8 бит вообще не используются дальше, но я не проверял. А вот так видим на анализаторе:

Эмулятор CD-Rom для SonyPlaystation который я писал больше десяти лет. Часть 1 - 7

Пины 3,4,8 всё сходится с даташитом. Надо также учесть, что тактовая частота, и сигнал указания канала передаются даже если данных с сидирома не идёт.

Дальше данные субканала. Здесь по больше части тоже без сюрпризов.

Эмулятор CD-Rom для SonyPlaystation который я писал больше десяти лет. Часть 1 - 8

На линии SCOR появляется импульс в момент когда привод встречает так называемую последовательность S0 или S1 при чтение фрейма с диска, что это я, возможно расскажу, но если говорить упрощенно это метка начала сектора. После этого сигнал SUBQ должен перейти в высокое состояние, это говорит о том, что есть готовые данные в буфере субканала. Дальше при помощи SQCK мы по одному биту вытаскиваем 96 бит данных, из них к субканалу относятся первые 80 бит, последние 16 это какой то PeakMeter скорей всего он имеет адекватные значения только для аудио-сд. Последние 16 бит могут иметь и другие значения, но я не видел вариантов, чтобы приставка переключалась в другой режим. Да я говорил почти без сюрпризов, но сюрпризы таки были:

Эмулятор CD-Rom для SonyPlaystation который я писал больше десяти лет. Часть 1 - 9

Как видим здесь читается 18 бит, что очень странно, но в последствии мы разберемся, что это такое. И не мусор ли это вообще.

А вот тут начинается уже интересное а именно управляющие сигналы. По даташиту эту выглядит так:

Эмулятор CD-Rom для SonyPlaystation который я писал больше десяти лет. Часть 1 - 10

То есть загоняем биты по одному от младшего к старшему, а сигнал XLAT защелкивает полученную комбинацию и отсылает на исполнение. Это позволяет делать переменную длину параметров команды,
Что видим на самом деле:

Эмулятор CD-Rom для SonyPlaystation который я писал больше десяти лет. Часть 1 - 11

Вроде бы всё так, но мне совершенно непонятно было зачем ещё шлются байты 0x50 и 0xA0 но не защелкиваются(а надо внимательно даташит было читать, но это же, так скучно). В общем шлёт да и шлёт, с кем не бывает.

И остаются последние два сигнала SENS и SCLK:

Эмулятор CD-Rom для SonyPlaystation который я писал больше десяти лет. Часть 1 - 12

По описанию в русскоязычных источниках SENS работает вместе с SCLK но SCLK ни разу не поменял свое состояние. По даташиту:

SENS output to CPU.

Причем я прочитал даже как оно работает без SCLK и всё равно не понял почему же оно так ведет. Почему меняет состояние когда вздумается. И в голове мелькнула шальная мысль, что нога болтается в HI-Z состоянии и просто ловит наводки от соседних пинов. Для теста подтянул пин к земле привод даже не стал раскручивать диск. Подтянул в VCC и всё отлично работало. Это была моя первая серьёзная ошибка которая в будущем потрепала нервы. Но об этом позже.

2.2.3 Выводы

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

Задача эмуляции это микросхемы выглядела не очень сложной. Принимать команды, и эмулировать на выходе данные субканала, и данные привода. Доверить всё это дело я решил плате DE1. Во-первых, она у меня была. Во-вторых, валялась без дела. Ну и третьих мне показалось, что FPGA просто идеально подходит для таких дел, это оказалось правдой. К тому же там уже есть слот для SD карты, откуда и собирался брать данные для эмуляции. В общем задачей номер один стало проэмулировать, чтение оглавление диска. А для этого нужно было понять как оно формируется,. но об этом поговорим в следующей части.

Автор:
VBKesha

Источник


* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js