vault backup: 2025-04-19 00:31:03
This commit is contained in:
8
.obsidian/workspace.json
vendored
8
.obsidian/workspace.json
vendored
@@ -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",
|
||||
|
||||
@@ -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 — от классического геймпада до танцевальных ковриков! 🎮
|
||||
Функция `ChangeClearPad` относится к работе с контроллерами (геймпадами) PlayStation и используется для управления поведением буфера ввода.
|
||||
|
||||
## Назначение функции
|
||||
|
||||
`ChangeClearPad` изменяет режим очистки буфера данных контроллера. Она определяет, как система будет обрабатывать ввод с геймпада между кадрами:
|
||||
|
||||
1. **Автоматическая очистка буфера** (по умолчанию) - система автоматически очищает данные о предыдущем состоянии кнопок
|
||||
2. **Ручное управление буфером** - позволяет программисту самому решать, когда очищать буфер ввода
|
||||
|
||||
## Синтаксис
|
||||
|
||||
```c
|
||||
void ChangeClearPad(int mode);
|
||||
```
|
||||
|
||||
где `mode` может принимать значения:
|
||||
- `0` - ручной режим (очистка буфера только при вызове `ClearPad()`)
|
||||
- `1` - автоматический режим (очистка при каждом VSync)
|
||||
|
||||
## Практическое использование
|
||||
|
||||
```c
|
||||
#include <libpad.h>
|
||||
|
||||
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.
|
||||
Reference in New Issue
Block a user