====== Retrolang ====== Retrolang - свободный комплект разработки (SDK) под PlayStation и одноименный язык программирования, разработанные с полного нуля без зависимости от стороннего ПО. Включает компилятор, ассемблер, дизассемблер, систему автоматизации сборки, собственную стандартную библиотеку, утилиты для конвертации текстур и звуков. https://github.com/gecko0307/retrolang Особенностью проекта является стопроцентная юридическая чистота. SDK разработан полностью независимо, без использования дизассемблированного кода, и не включает материалы, защищенные авторским правом. Retrolang нацелен на замену всех устаревших утилит, особенно проприетарных, современными свободными аналогами. Весь инструментарий Retrolang написан на [[https://dlang.org|языке D]]. ===== Язык ===== Retrolang - простой C-подобный процедурный язык, специально разработанный для выполнения программ в условиях крайне ограниченного объема памяти. Поддерживает базовые целочисленные типы int, short, char, uint, ushort, uchar, void, а также указатели на них. Поддерживается приведение типов. Поддерживаются статические массивы, строки, структуры. Реализованы все основные арифметические, логические и побитовые операторы. Операторы потока управления: if/else, while, do-while, for, break, continue, return. Пример программы: #import "retrolib.r" void main() { printf("Hello, World!\n"); } В отличие от C, Retrolang реализует некоторые низкоуровневые возможности PlayStation в виде интринсиков - встроенных инструкций компилятора, которые разворачиваются не в обычные вызовы, а специальные блоки машинного кода. Это позволяет использовать функции [[BIOS]] и команды [[GTE]] без необходимости написания частей программы на языке ассемблера. Например, следующий код загружает в контрольные регистры GTE вектор смещения: ctc2(GTE_TRX, tx); ctc2(GTE_TRY, ty); ctc2(GTE_TRZ, tz); Язык, тем не менее, включает также и полнофункциональный встроенный ассемблер MIPS-I. Для работы с BIOS есть готовый модуль "bios.r". ===== Библиотека Retrolib ===== Retrolang предоставляет системную библиотеку, которая облегчает работу с аппаратным обеспечением: * Работа с [[GPU]], рендеринг 2D и 3D-графики - напрямую или через командные буферы и [[DMA]]; * Чтение файлов [[TIM]] и загрузка в видеопамять; * Работа с [[PAD|геймпадом]]; * Работа с [[BIOS]], в том числе установка обработчиков [[interrupt|прерываний]]; * Работа с [[cd_rom|CD-ROM]]; * Работа с [[memory_card|картами памяти]]; * Воспроизведение музыки [[cdda|CD Audio]] и [[XA]]; * Воспроизведение видео [[STR]]. ===== Инструменты ===== * RLC (Retrolang Compiler) - компилятор языка Retrolang в машинный код MIPS R3000 * Retrobuild - система автоматизации сборки, которая упрощает компиляцию проектов и создание образов дисков * PSXDISASM - дизассемблер бинарников MIPS R3000 * PNG2TIM - конвертер PNG в [[TIM]] * WAV2VAG - конвертер WAV в [[VAG]] * XA Tool - кодировщик/интерливер потоков [[XA]] * DATWrite - генератор патчей системной зоны диска, позволяет вставить в игру свое лого для экрана загрузки. ===== Хост-платформы ===== Все инструменты кроссплатформенны и могут быть собраны под любой хост-системой, для которой существует реализация компилятора D. В бинарном виде релизы Retrolang предоставляются пока только для Windows.