70 lines
2.6 KiB
Markdown
70 lines
2.6 KiB
Markdown
|
||
|
||
``` 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);
|
||
}
|
||
}
|
||
``` |