====== 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.