CD-декодер предназначен для распределения данных с диска между центральным процессором (CPU) и звуковым процессором (SPU). Конечным результатом работы являются данные файлов, записанных на секторы диска (для CPU) или потоковое CD-Audio (для SPU). Функционально CD-декодер является своего рода "мостом" подсистемы PSX.
Как и большинство других компонентов CD/Audio системы CD-декодер был впоследствии включен в состав одной большой микросхемы, поэтому рассматривать его мы будем как отдельную микросхему - IC305
(CXD1815Q).
Спасибо Мартину Корту, он обнаружил что в версии материнок PU-7 использовался CXD1199, на который есть даташит.
Программист может управлять CD-декодером через его 4 регистра, обычно они называются просто CDREG0
-CDREG3
.
Управление осуществляется путём посылки специальных команд.
Также доступно CD DMA, для пересылки данных в память центрального процессора.
Схема (правда от CXD1199, но думаю что принципиальных отличий нет):
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 |