Files
SergObsidian/PERSONAL PROJECTS/PS1 DOCS/CD_Execute_Reading.md
2025-04-21 22:24:44 +05:00

70 lines
2.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

``` c (PSX)
void CD_ExecuteReading(int param_1)
{
// Проверка статуса чтения CD
if ((DAT_CD_READ_STATUS < 3) && (DAT_CD_READ_STATUS >= 0)) {
return;
}
// Проверка глобального состояния системы
if ((DWORD_80083938 == 6) || (DWORD_80083938 == 3)) {
return;
}
// Проверка изменения состояния
if (DWORD_800838b8 != DWORD_80083718) {
DWORD_800838b8 = DWORD_80083718;
FUN_EMPTY(); // Какая-то инициализация/сброс
// Основная логика обработки состояний
switch (DAT_CD_READ_STATUS) {
case 3:
case 5:
case 8:
case 10:
// Проверка статуса привода
byte driveStatus = DsStatus();
// Условие для смены статуса
if ((driveStatus & 0x60) == 0 && (DWORD_80083718 - DWORD_800838b4) >= 0xB5) {
DAT_CD_READ_STATUS = 2;
FUN_8004a19c(); // Какая-то функция обработки
// Дополнительные проверки статуса
if (DAT_CD_READ_STATUS != 5) {
if (DAT_CD_READ_STATUS < 6) {
if (DAT_CD_READ_STATUS == 3) {
FUN_80026d58(); // Обработка состояния 3
}
} else {
if (DAT_CD_READ_STATUS == 10) {
DsSectorSeek(); // Поиск сектора
} else if (DAT_CD_READ_STATUS == 12) {
readCD_XA(); // Чтение XA-аудио
}
}
}
}
break;
case 5:
// Специальная обработка для состояния 5
if (DsSystemStatus() == 1) {
FUN_80026eec(); // Функция завершения
}
break;
default:
// Ничего не делаем для других состояний
break;
}
}
// Чтение сектора, если статус в диапазоне 0xC-0xF
if ((DAT_CD_READ_STATUS >= 0xC) && (DAT_CD_READ_STATUS < 0x10)) {
CD_SectorRead(param_1);
}
}
```