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": {
|
"state": {
|
||||||
"type": "markdown",
|
"type": "markdown",
|
||||||
"state": {
|
"state": {
|
||||||
"file": "PERSONAL PROJECTS/PS1 DOCS/PS1 DMA.md",
|
"file": "PERSONAL PROJECTS/PS1 DOCS/PS1 IRQ.md",
|
||||||
"mode": "source",
|
"mode": "source",
|
||||||
"source": false
|
"source": false
|
||||||
},
|
},
|
||||||
"icon": "lucide-file",
|
"icon": "lucide-file",
|
||||||
"title": "PS1 DMA"
|
"title": "PS1 IRQ"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
@@ -207,6 +207,8 @@
|
|||||||
},
|
},
|
||||||
"active": "dd912cc876184c4f",
|
"active": "dd912cc876184c4f",
|
||||||
"lastOpenFiles": [
|
"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/PS1 IRQ.md",
|
||||||
"PERSONAL PROJECTS/PS1 DOCS/PSX code IRQ handling.md",
|
"PERSONAL PROJECTS/PS1 DOCS/PSX code IRQ handling.md",
|
||||||
"PERSONAL PROJECTS/PS1 DOCS/PS1 Geometry Transformation Engine.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 inline asm.md",
|
||||||
"PERSONAL PROJECTS/PS1 DOCS/PSX code - Texture show from file.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/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/PSX code - Load texture from SECTOR!.md",
|
||||||
"PERSONAL PROJECTS/PS1 DOCS/PS1 Vblank.md",
|
"PERSONAL PROJECTS/PS1 DOCS/PS1 Vblank.md",
|
||||||
"PERSONAL PROJECTS/PS1 DOCS/PS1 MDEC.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 Gpu-DMA.md",
|
||||||
"PERSONAL PROJECTS/PS1 DOCS/PS1 DMA CD-ROM.md",
|
"PERSONAL PROJECTS/PS1 DOCS/PS1 DMA CD-ROM.md",
|
||||||
"WORK & PROJECTS/Mol/Ideas/Все идеи для Моли.md",
|
"WORK & PROJECTS/Mol/Ideas/Все идеи для Моли.md",
|
||||||
|
|||||||
@@ -109,8 +109,83 @@ while (1) {
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## **8. Полезные ссылки**
|
# Функция `ChangeClearPad` в библиотеке PsyQ для PlayStation 1
|
||||||
- [PSX Controller Protocol](http://problemkaputt.de/psx-spx.htm#controllersandmemorycards)
|
|
||||||
- [PsyQ SDK Pad Docs](http://psx.arthus.net/sdk/PsyQ/DOCS/PADZ.HTM)
|
|
||||||
|
|
||||||
Это основа для работы с любыми контроллерами 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