From d273c5bb1207a4c5a4c0cc8f4db413d46b8c0d30 Mon Sep 17 00:00:00 2001 From: sShemet Date: Sat, 19 Apr 2025 00:01:00 +0500 Subject: [PATCH] vault backup: 2025-04-19 00:01:00 --- .obsidian/workspace.json | 6 +- .../PS1 DOCS/PSX code IRQ handling.md | 123 ++++++++++++++++++ PERSONAL PROJECTS/PS1 DOCS/Untitled.md | 0 3 files changed, 126 insertions(+), 3 deletions(-) create mode 100644 PERSONAL PROJECTS/PS1 DOCS/PSX code IRQ handling.md delete mode 100644 PERSONAL PROJECTS/PS1 DOCS/Untitled.md diff --git a/.obsidian/workspace.json b/.obsidian/workspace.json index 6ac0eab..9282804 100644 --- a/.obsidian/workspace.json +++ b/.obsidian/workspace.json @@ -41,12 +41,12 @@ "state": { "type": "markdown", "state": { - "file": "PERSONAL PROJECTS/PS1 DOCS/Untitled.md", + "file": "PERSONAL PROJECTS/PS1 DOCS/PS1 IRQ.md", "mode": "source", "source": false }, "icon": "lucide-file", - "title": "Untitled" + "title": "PS1 IRQ" } } ], @@ -207,8 +207,8 @@ }, "active": "dd912cc876184c4f", "lastOpenFiles": [ + "PERSONAL PROJECTS/PS1 DOCS/PSX code IRQ handling.md", "PERSONAL PROJECTS/PS1 DOCS/PS1 IRQ.md", - "PERSONAL PROJECTS/PS1 DOCS/Untitled.md", "PERSONAL PROJECTS/PS1 DOCS/PS1 Geometry Transformation Engine.md", "PERSONAL PROJECTS/PS1 DOCS/LZSS C++ Lib.md", "PERSONAL PROJECTS/PS1 DOCS/PS1 Ordering table.md", diff --git a/PERSONAL PROJECTS/PS1 DOCS/PSX code IRQ handling.md b/PERSONAL PROJECTS/PS1 DOCS/PSX code IRQ handling.md new file mode 100644 index 0000000..7a9f16a --- /dev/null +++ b/PERSONAL PROJECTS/PS1 DOCS/PSX code IRQ handling.md @@ -0,0 +1,123 @@ +# Работа с прерываниями PS1 в коде C через библиотеки PsyQ + +Для работы с прерываниями на PlayStation 1 (PSX) с использованием библиотек PsyQ в C вам нужно понимать несколько ключевых концепций. + +## Основные шаги для работы с прерываниями + +1. **Инициализация системы прерываний**: + ```c + #include + #include + #include + #include + #include + #include + #include + #include + + void init_interrupts(void) + { + // Инициализация системы прерываний + EnterCriticalSection(); // Вход в критическую секцию + ResetCallback(); // Сброс обработчиков + + // Установка обработчиков прерываний + setVSyncCallback(vsync_handler); + // Можно добавить другие обработчики (CD, SPU и т.д.) + + ExitCriticalSection(); // Выход из критической секции + } + ``` + +2. **Обработчик вертикальной синхронизации (VSync)**: + ```c + void vsync_handler(void) + { + // Этот код выполняется каждый кадр (60 раз в секунду на NTSC) + // Здесь можно обновлять логику, анимации и т.д. + } + ``` + +## Типы прерываний в PS1 + +Основные типы прерываний, с которыми вы можете работать: + +1. **VBlank (вертикальная синхронизация)** - возникает в конце каждого кадра +2. **CD-ROM** - прерывания от CD-привода +3. **SPU (звуковой процессор)** - прерывания от звуковой системы +4. **GPU** - прерывания от графического процессора + +## Пример работы с VBlank + +```c +#include +#include + +volatile int vblank_count = 0; + +void vblank_handler(void) +{ + vblank_count++; +} + +int main() +{ + // Инициализация PsyQ + ResetGraph(0); + InitGeom(); + + // Установка обработчика VBlank + EnterCriticalSection(); + setVSyncCallback(vblank_handler); + ExitCriticalSection(); + + // Основной цикл + while(1) + { + printf("VBlank count: %d\n", vblank_count); + + // Ожидание следующего VBlank + VSync(0); + } + + return 0; +} +``` + +## Работа с другими прерываниями + +### CD-ROM прерывания +```c +void cdrom_handler(void) +{ + // Обработка событий CD-ROM +} + +// Установка обработчика +CdReadyCallback(cdrom_handler); +``` + +### SPU прерывания +```c +void spu_handler(void) +{ + // Обработка событий звукового процессора +} + +// Установка обработчика +SpuSetIRQCallback(spu_handler); +``` + +## Важные замечания + +1. **Критические секции**: Все операции с прерываниями должны выполняться внутри критических секций (`EnterCriticalSection()`/`ExitCriticalSection()`). + +2. **Ограничения обработчиков**: Обработчики прерываний должны быть короткими и быстрыми, не должны вызывать сложные функции. + +3. **Регистрация обработчиков**: Используйте соответствующие функции PsyQ для регистрации обработчиков (`setVSyncCallback`, `CdReadyCallback` и т.д.). + +4. **Очистка**: Перед завершением программы желательно сбросить обработчики прерываний. + +5. **Совместимость**: Убедитесь, что ваша версия PsyQ поддерживает нужные функции. + +Для более сложных проектов может потребоваться прямое взаимодействие с регистрами прерываний PS1, но библиотеки PsyQ предоставляют удобную абстракцию для большинства задач. \ No newline at end of file diff --git a/PERSONAL PROJECTS/PS1 DOCS/Untitled.md b/PERSONAL PROJECTS/PS1 DOCS/Untitled.md deleted file mode 100644 index e69de29..0000000