CD-CONTROLLER

From PSXDEV
Jump to: navigation, search

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

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

200px

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

Contents

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

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

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

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

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

IC305 overview.jpg

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

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

  • HA0-HA1: 2-битная шина адреса (host address), 2 разряда используются потому что CD-контроллер содержит в своём составе всего 4 регистра управления.
  • HD0-HD7: 8-битная шина данных (host data). По этим двум шинам контроллер обменивается с CPU значениями своих регистров.
  • A0-A4: 5-бит адресная шина с SUB-CPU (адресуется всего-лишь 32 байта - внутренние регистры контроллера)
  • 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.
  • Единственный нерешенный вопрос - это CD DMA. Пока не понятно каким образом центральный процессор ораганизует DMA-пересылку CD-данных. Есть предположение что для этого используется особая комбинация XHWR/XHRD, либо особая работа с регистрами CDREG0-CDREG3. Точно можно сказать, что передаваемые данные могут попасть в CPU только одним путём - через шину HD (SD).

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

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

Индекс(HEX) Название Описание
17 CD_RESULT_0 Результат выполнения команды (байт 0)
18 CD_RESULT_1 Результат выполнения команды (байт 1)
19 CD_RESULT_2 Результат выполнения команды (байт 2)
1A CD_RESULT_3 Результат выполнения команды (байт 3)
1B CD_RESULT_4 Результат выполнения команды (байт 4)
1C CD_RESULT_5 Результат выполнения команды (байт 5)
1D CD_RESULT_6 Результат выполнения команды (байт 6)
1E CD_RESULT_7 Результат выполнения команды (байт 7)
1F