vault backup: 2025-04-19 01:51:11

This commit is contained in:
sShemet
2025-04-19 01:51:11 +05:00
parent e31580b849
commit b0a9dc5628
3 changed files with 192 additions and 7 deletions

View File

@@ -186,6 +186,78 @@ int main() {
5. Функция работает с обоими портами контроллера (0 и 1)
## Совместимость
-----
`ChangeClearPad` является частью библиотеки `libpad.h` в PsyQ SDK и доступна во всех версиях. Аналогичная функциональность присутствует и в официальном Sony SDK для PS1.
# Функция `PadChkVsync` в библиотеке PsyQ для PlayStation 1
Функция `PadChkVsync` используется для проверки состояния геймпада (контроллера) с синхронизацией по вертикальному гашению (VSync). Это важная функция для обработки ввода в играх на PS1.
## Основное назначение
`PadChkVsync` выполняет две ключевые задачи:
1. Проверяет состояние подключенных контроллеров
2. Синхронизирует чтение состояния с вертикальной синхронизацией (VSync)
## Синтаксис
```c
int PadChkVsync(void);
```
## Возвращаемое значение
Функция возвращает битовую маску, указывающую на состояние подключения контроллеров:
- Бит 0: Состояние порта 1 (0 - контроллер подключен, 1 - не подключен)
- Бит 1: Состояние порта 2
- Бит 2: Состояние мемори-карты в порту 1
- Бит 3: Состояние мемори-карты в порту 2
## Особенности работы
1. **Синхронизация с VSync** - чтение состояния происходит во время вертикального гашения, что предотвращает "разрывы" изображения
2. **Определение подключенных устройств** - позволяет определить, какие контроллеры/мемори-карты подключены
3. **Работа в паре с другими функциями Pad** - обычно используется вместе с `PadRead()`
## Пример использования
```c
#include <libpad.h>
int main() {
PadInit(0); // Инициализация системы контроллеров
while(1) {
// Проверка состояния подключения
int connected = PadChkVsync();
if (!(connected & 1)) { // Если контроллер в порту 1 подключен
u_long pad = PadRead(0); // Чтение состояния
if (pad & PAD_UP) {
// Обработка нажатия UP
}
// Другие проверки кнопок...
}
VSync(0); // Ожидание следующего VBlank
}
return 0;
}
```
## Типичный сценарий использования
1. В начале кадра вызывается `PadChkVsync()` для проверки подключенных устройств
2. Если контроллер подключен, вызывается `PadRead()` для получения состояния кнопок
3. Состояние кнопок обрабатывается в игровой логике
4. Цикл повторяется после `VSync(0)`
## Важные нюансы
1. Функция не возвращает состояние кнопок - только информацию о подключении
2. Для фактического чтения кнопок нужно использовать `PadRead()`
3. Рекомендуется вызывать эту функцию один раз за кадр
4. В отличие от `PadRead()`, `PadChkVsync` не очищает буфер ввода
Функция `PadChkVsync` особенно полезна в играх, где важно точно определять момент подключения/отключения контроллеров во время gameplay, например, в multiplayer-играх с возможностью "hot-plug" контроллеров.