From b5be54f719f14da92921173537ee3feb36c209d8 Mon Sep 17 00:00:00 2001 From: sShemet Date: Sat, 19 Apr 2025 23:55:44 +0500 Subject: [PATCH] vault backup: 2025-04-19 23:55:44 --- .obsidian/workspace.json | 14 +-- .../P2EP/pseudoCode/RenderInterface.md | 87 +++++++++++++++++++ PERSONAL PROJECTS/P2EP/pseudoCode/Untitled.md | 0 3 files changed, 94 insertions(+), 7 deletions(-) create mode 100644 PERSONAL PROJECTS/P2EP/pseudoCode/RenderInterface.md create mode 100644 PERSONAL PROJECTS/P2EP/pseudoCode/Untitled.md diff --git a/.obsidian/workspace.json b/.obsidian/workspace.json index 77d30c1..7c20af0 100644 --- a/.obsidian/workspace.json +++ b/.obsidian/workspace.json @@ -41,12 +41,12 @@ "state": { "type": "markdown", "state": { - "file": "PERSONAL PROJECTS/PS1 DOCS/PS1 IRQ.md", + "file": "PERSONAL PROJECTS/P2EP/pseudoCode/Untitled.md", "mode": "source", "source": false }, "icon": "lucide-file", - "title": "PS1 IRQ" + "title": "Untitled" } } ], @@ -207,13 +207,17 @@ }, "active": "dd912cc876184c4f", "lastOpenFiles": [ + "PERSONAL PROJECTS/P2EP/pseudoCode/RenderInterface.md", + "PERSONAL PROJECTS/P2EP/pseudoCode/Untitled.md", + "PERSONAL PROJECTS/PS1 DOCS/PS1 IRQ.md", + "PERSONAL PROJECTS/P2EP/pseudoCode", + "PERSONAL PROJECTS/PS1 DOCS/Untitled", "PERSONAL PROJECTS/PS1 DOCS/fade calculation.md", "PERSONAL PROJECTS/PS1 DOCS/PS1 Gamepad.md", "PERSONAL PROJECTS/PS1 DOCS/PS1 Gpu-DMA.md", "PERSONAL PROJECTS/PS1 DOCS/PS1 Ordering table.md", "PERSONAL PROJECTS/PS1 DOCS/PS1 DMA.md", "PERSONAL PROJECTS/PS1 DOCS/PS1 MDEC.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", "PERSONAL PROJECTS/PS1 DOCS/LZSS C++ Lib.md", @@ -240,8 +244,6 @@ "My/Diet 2.md", "My", "WORK & PROJECTS/Mol/Планы и диаграммы/MOL _ План разработки.md", - "WORK & PROJECTS/Mol/Планы и диаграммы/План СИЛА.md", - "WORK & PROJECTS/Mol/Планы и диаграммы/СМК.md", "WORK & PROJECTS/Mol/Планы и диаграммы/Alfa Cloud", "Структура объектов испытаний.png", "Схема связей юрлиц и адресов.png", @@ -249,8 +251,6 @@ "WORK & PROJECTS/Mol/Документы для ТЗ ЛИМС/АФ-01 Альбом форм.pdf", "WORK & PROJECTS/Mol/Серверы/Схема инфраструктуры.canvas", "WORK & PROJECTS/Ulab/Автобан/щебень 5-20.xlsx", - "WORK & PROJECTS/Ulab/Автобан/щебень 20-40.xlsx", - "WORK & PROJECTS/Ulab/Автобан/песок природный.xls", "WORK & PROJECTS/Mol/Серверы/Alfa cloud prod.canvas", "PERSONAL PROJECTS/P2EP/cdRead.canvas", "P2EP/cdRead.canvas", diff --git a/PERSONAL PROJECTS/P2EP/pseudoCode/RenderInterface.md b/PERSONAL PROJECTS/P2EP/pseudoCode/RenderInterface.md new file mode 100644 index 0000000..fe1a962 --- /dev/null +++ b/PERSONAL PROJECTS/P2EP/pseudoCode/RenderInterface.md @@ -0,0 +1,87 @@ +``` c +#include +#include +#include + +/* Константы */ +#define SCRAM_ADDR 0x1F800000 // Быстрая память PS1 +#define MAX_ELEMENTS 32 // Максимальное количество элементов интерфейса + +/* Структура элемента интерфейса */ +typedef struct { + GsCOORDINATE2 coord; // Система координат + u_short flags; // Флаги видимости/состояния + RECT clip; // Область отсечения + u_char texture_page; // Номер TPage + SVECTOR position; // Позиция (x,y,z) + SVECTOR scale; // Масштаб + u_short *sprite_data; // Данные спрайта +} InterfaceElement; + +/* Главная функция рендеринга интерфейса */ +u_long RenderInterface(GsOT *ot, InterfaceElement *elements, int count) +{ + /* Инициализация буферов */ + u_long *work_buffer = (u_long*)SCRAM_ADDR; + MATRIX local_matrix; + GsCOORDINATE2 *current_coord; + int i, processed = 0; + + /* Сохраняем текущую матрицу */ + GsPushMatrix(); + + /* Очистка рабочего буфера */ + memset(work_buffer, 0, 0xD8); + + /* Настройка матрицы проекции */ + gte_SetGeomOffset(160, 120); // Центр экрана (320x240) + gte_SetGeomScreen(512); // Коэффициент перспективы + + /* Основной цикл рендеринга */ + for (i = 0; i < count; i++) { + InterfaceElement *elem = &elements[i]; + + /* Проверка видимости элемента */ + if (!(elem->flags & 0x8000)) continue; + + /* Установка локальной матрицы */ + GsGetLs(&elem->coord, &local_matrix); + GsSetLsMatrix(&local_matrix); + + /* Обработка спрайта */ + if (elem->flags & 0x0001) { + /* Настройка TPage */ + GsSortTPage(elem->texture_page, GetTPage(2, 0, 0, 0), ot); + + /* Трансформация вершин */ + gte_ldv3(&elem->position, + (SVECTOR*)((u_long)elem->position.vx + 8), + (SVECTOR*)((u_long)elem->position.vy + 8)); + gte_rtpt(); + + /* Проверка видимости полигона */ + if (gte_nclip()) { + /* Генерация 2D-координат */ + POLY_FT3 *poly = (POLY_FT3 *)work_buffer; + setPolyFT3(poly); + + /* Установка параметров */ + poly->tpage = GetTPage(2, 0, elem->texture_page, 0); + poly->clut = GetClut(0, 0); + + /* Расчет координат */ + gte_stsxy3(&poly->x0, &poly->x1, &poly->x2); + + /* Добавление в Ordering Table */ + GsSortPrim(ot, poly); + } + } + processed++; + } + + /* Восстановление матрицы */ + GsPopMatrix(); + + return processed; // Возвращаем количество обработанных элементов +} +``` \ No newline at end of file diff --git a/PERSONAL PROJECTS/P2EP/pseudoCode/Untitled.md b/PERSONAL PROJECTS/P2EP/pseudoCode/Untitled.md new file mode 100644 index 0000000..e69de29