Skip to content

Latest commit

 

History

History
81 lines (52 loc) · 8.74 KB

cddec.md

File metadata and controls

81 lines (52 loc) · 8.74 KB

CD Decoder

⚠️ В разных источниках эта микросхема может называться либо CD-декодер, либо CD-контроллер. Раньше на вики мы использовали термин "CD-контроллер", но затем поменяли на "CD-декодер", в соответствеии с даташитом. Если где-то ещё встретится CD-Controller имейте ввиду что это одно и то же. Официальные сервисные мануалы например используют термин "CD-Controller".

CD-декодер предназначен для распределения данных с диска между центральным процессором (CPU) и звуковым процессором (SPU). Конечным результатом работы являются данные файлов, записанных на секторы диска (для CPU) или потоковое CD-Audio (для SPU). Функционально CD-декодер является своего рода "мостом" подсистемы PSX.

Как и большинство других компонентов CD/Audio системы CD-декодер был впоследствии включен в состав одной большой микросхемы, поэтому рассматривать его мы будем как отдельную микросхему - IC305 (CXD1815Q).

CXD1815Q_package

Спасибо Мартину Корту, он обнаружил что в версии материнок PU-7 использовался CXD1199, на который есть даташит.

Интерфейс программиста

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

Управление осуществляется путём посылки специальных команд.

Также доступно CD DMA, для пересылки данных в память центрального процессора.

Аппаратный интерфейс

IC305_overview

Схема (правда от CXD1199, но думаю что принципиальных отличий нет):

CXD1199_circuit

CD-декодер соединяется с центральным процессором, с вспомогательным процессором SUB-CPU, а также с памятью CDROM (IC303), поэтому он имеет сразу три набора шин адреса/данных:

  • HA0-HA1: 2-битная шина адреса (host address), 2 разряда используются потому что CD-декодер содержит в своём составе всего 4 регистра управления.
  • HD0-HD7: 8-битная шина данных (host data). По этим двум шинам CD-декодер обменивается с CPU значениями своих регистров.
  • A0-A4: 5-бит адресная шина с SUB-CPU (адресуется всего-лишь 32 байта - внутренние регистры CD-декодера)
  • D0-D7: 8-бит шина данных с SUB-CPU. SUB-CPU адресуется к декодеру через эти две шины.
  • MA0-MA16: 17-бит шина адреса с CDROM RAM (используется только 15 бит MA0-MA14, адресуя 32 KB RAM)
  • MDB0-MDB7: 8-бит шина данных с CDROM RAM. Декодер адресуется к своей памяти через эти две шины.
  • TD0-TD7: похоже какая-то тестовая шина (test data?), не подсоединена.

Управляющие контакты:

  • CPU side: XHWR (write), XHRD (read), HINT (прерывание), XHCS (chip select), XHRS (сброс, не используется)
  • SUB-CPU side: XINT (прерывание), XWR (write), XRD (read), XCS (chip select), XRST (сброс). При этом в данном случае SUB-CPU управляет декодером. Декодер может только отправить прерывание в SUB-CPU.
  • CDROM RAM side: XMOE (chip enable), XMWR (write)

Как обычно, контакты названия которых начинаются с "X", имеют инверсную логику (active low).

Выходной поток CD-данных для SPU: BCKO (bit clock), LRCO (left/right clock), DATO (data out) (последовательный интерфейс)

Контакты для соединения с CD-DSP: EMP, C2PO, BCLK, DATA, LRCK, RMCK. Назначение уточняется 😃

Другие неиспользуемые контакты: MUTE (не подсоединен), WCKO (word clock, не подсоединен), CKSL (clock select, заземлен), HCLK (не подсоединен), MDBP,HDP (не подсоединен), HDRQ (DMA request, не подсоединен), XHAC (заземлен)

Как организуется пересылка данных

Данное описание по большей части спекулятивное, поскольку точных деталей работы внутренностей CD-декодера пока нет.

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

  • Во-первых абсолютно точно известно, что прочитанные CD-данные хранятся в памяти CDROM (ещё иногда называемой FIFO). Эти данные предназначены для двух потребителей: для SPU и для центрального процессора.
  • В плане SPU вопросов нет: внутри декодера находится последовательный интерфейс, который выдает потоковое аудио на SPU через контакты BCKO, LRCO и DATO.
  • Загрузка входных данных в память CDROM происходит через последовательный интерфейс с CD-DSP
  • Команды поступаемые на CDREG0-CDREG3 видимо "парсятся" микрокодом SUB-CPU. При этом скорее всего CD-декодер использует прерывание SUB-CPU (сигнал XINT), чтобы просигналить о том, что нужно обработать очередную порцию данных, поступаемых на CDREG0-CDREG3. SUB-CPU также может установить выходные значение регистров. Чтобы сказать точнее необходимо дизассемблировать ROM SUB-CPU.
  • DMA происходит особым образом: Вначале используя команду чтения сектора CD-декодер переводится в DMA режим. Затем процессор используя шину Sub bus последовательно вычитывает данные из внутреннего DMA-буфера декодера.

Внутренние регистры

Внутри CD-декодера есть место для 32 8-битных регистров. Данные о внутренних регистрах получаются путём исследования микрокода SUB-CPU.

Индекс(HEX) Название Описание
0x17 CD_RESULT_0 Результат выполнения команды (байт 0)
0x18 CD_RESULT_1 Результат выполнения команды (байт 1)
0x19 CD_RESULT_2 Результат выполнения команды (байт 2)
0x1A CD_RESULT_3 Результат выполнения команды (байт 3)
0x1B CD_RESULT_4 Результат выполнения команды (байт 4)
0x1C CD_RESULT_5 Результат выполнения команды (байт 5)
0x1D CD_RESULT_6 Результат выполнения команды (байт 6)
0x1E CD_RESULT_7 Результат выполнения команды (байт 7)
0x1F

fixme