From 80029c6982adfdb7f354b76125cf48259a1f04b5 Mon Sep 17 00:00:00 2001 From: sShemet Date: Sat, 19 Apr 2025 00:31:03 +0500 Subject: [PATCH] vault backup: 2025-04-19 00:31:03 --- .obsidian/workspace.json | 8 +-- PERSONAL PROJECTS/PS1 DOCS/PS1 Gamepad.md | 83 +++++++++++++++++++++-- 2 files changed, 83 insertions(+), 8 deletions(-) diff --git a/.obsidian/workspace.json b/.obsidian/workspace.json index e477656..f4ae0d2 100644 --- a/.obsidian/workspace.json +++ b/.obsidian/workspace.json @@ -41,12 +41,12 @@ "state": { "type": "markdown", "state": { - "file": "PERSONAL PROJECTS/PS1 DOCS/PS1 DMA.md", + "file": "PERSONAL PROJECTS/PS1 DOCS/PS1 IRQ.md", "mode": "source", "source": false }, "icon": "lucide-file", - "title": "PS1 DMA" + "title": "PS1 IRQ" } } ], @@ -207,6 +207,8 @@ }, "active": "dd912cc876184c4f", "lastOpenFiles": [ + "PERSONAL PROJECTS/PS1 DOCS/PS1 Gamepad.md", + "PERSONAL PROJECTS/PS1 DOCS/PS1 DMA.md", "PERSONAL PROJECTS/PS1 DOCS/PS1 IRQ.md", "PERSONAL PROJECTS/PS1 DOCS/PSX code IRQ handling.md", "PERSONAL PROJECTS/PS1 DOCS/PS1 Geometry Transformation Engine.md", @@ -217,11 +219,9 @@ "PERSONAL PROJECTS/PS1 DOCS/PSX code inline asm.md", "PERSONAL PROJECTS/PS1 DOCS/PSX code - Texture show from file.md", "PERSONAL PROJECTS/PS1 DOCS/PSX code - modules load and exec.md", - "PERSONAL PROJECTS/PS1 DOCS/PS1 Gamepad.md", "PERSONAL PROJECTS/PS1 DOCS/PSX code - Load texture from SECTOR!.md", "PERSONAL PROJECTS/PS1 DOCS/PS1 Vblank.md", "PERSONAL PROJECTS/PS1 DOCS/PS1 MDEC.md", - "PERSONAL PROJECTS/PS1 DOCS/PS1 DMA.md", "PERSONAL PROJECTS/PS1 DOCS/PS1 Gpu-DMA.md", "PERSONAL PROJECTS/PS1 DOCS/PS1 DMA CD-ROM.md", "WORK & PROJECTS/Mol/Ideas/Все идеи для Моли.md", diff --git a/PERSONAL PROJECTS/PS1 DOCS/PS1 Gamepad.md b/PERSONAL PROJECTS/PS1 DOCS/PS1 Gamepad.md index cdcdc7c..55c7f31 100644 --- a/PERSONAL PROJECTS/PS1 DOCS/PS1 Gamepad.md +++ b/PERSONAL PROJECTS/PS1 DOCS/PS1 Gamepad.md @@ -109,8 +109,83 @@ while (1) { --- -## **8. Полезные ссылки** -- [PSX Controller Protocol](http://problemkaputt.de/psx-spx.htm#controllersandmemorycards) -- [PsyQ SDK Pad Docs](http://psx.arthus.net/sdk/PsyQ/DOCS/PADZ.HTM) +# Функция `ChangeClearPad` в библиотеке PsyQ для PlayStation 1 -Это основа для работы с любыми контроллерами PS1 — от классического геймпада до танцевальных ковриков! 🎮 \ No newline at end of file +Функция `ChangeClearPad` относится к работе с контроллерами (геймпадами) PlayStation и используется для управления поведением буфера ввода. + +## Назначение функции + +`ChangeClearPad` изменяет режим очистки буфера данных контроллера. Она определяет, как система будет обрабатывать ввод с геймпада между кадрами: + +1. **Автоматическая очистка буфера** (по умолчанию) - система автоматически очищает данные о предыдущем состоянии кнопок +2. **Ручное управление буфером** - позволяет программисту самому решать, когда очищать буфер ввода + +## Синтаксис + +```c +void ChangeClearPad(int mode); +``` + +где `mode` может принимать значения: +- `0` - ручной режим (очистка буфера только при вызове `ClearPad()`) +- `1` - автоматический режим (очистка при каждом VSync) + +## Практическое использование + +```c +#include + +int main() { + // Инициализация контроллера + PadInit(0); + + // Переключение в ручной режим очистки буфера + ChangeClearPad(0); + + while(1) { + // Чтение состояния контроллера + PadRead(0); + + // В ручном режиме нужно самостоятельно очищать буфер + if(need_to_clear) { + ClearPad(0); + } + + // Автоматическая очистка происходить не будет + } +} +``` + +## Типичные сценарии использования + +1. **Фиксация коротких нажатий**: + ```c + ChangeClearPad(0); // Ручной режим + if(PadRead(0) { + if((pad_status & PAD_CROSS) && !(old_pad_status & PAD_CROSS)) { + // Обнаружено нажатие Cross + } + old_pad_status = pad_status; + ClearPad(0); // Очищаем буфер вручную + } + ``` + +2. **Комбинации кнопок** - когда нужно отслеживать состояние нескольких кнопок одновременно + +3. **Специальные игровые механики** - где важно точное время нажатия/отпускания кнопок + +## Важные нюансы + +1. По умолчанию в PsyQ используется автоматический режим (`ChangeClearPad(1)`) + +2. В ручном режиме вы должны самостоятельно вызывать `ClearPad()` для очистки буфера + +3. Функция влияет на работу `PadRead()` - в автоматическом режиме она сама очищает предыдущее состояние + +4. Для большинства игр достаточно стандартного автоматического режима + +5. Функция работает с обоими портами контроллера (0 и 1) + +## Совместимость + +`ChangeClearPad` является частью библиотеки `libpad.h` в PsyQ SDK и доступна во всех версиях. Аналогичная функциональность присутствует и в официальном Sony SDK для PS1. \ No newline at end of file