Retrolang — язык программирования для PlayStation 1
Всех энтузиастов разработки под классическую игровую консоль Sony PlayStation заинтересует проект Retrolang — новый SDK и одноименный язык программирования, разработанные с полного нуля без зависимости от стороннего ПО. Комплект включает компилятор в машинный код CPU MIPS R3000, ассемблер, дизассемблер, систему автоматизации сборки, небольшую стандартную библиотеку и набор демонстраций ее использования, в том числе движок 2D-платформера и демку с 3D-графикой.
Особенностью проекта является стопроцентная юридическая чистота. SDK разработан полностью независимо, без использования дизассемблированного кода, и не включает материалы, защищенные авторским правом. Retrolang нацелен на замену всех устаревших утилит, особенно проприетарных, современными свободными аналогами. Проект принципиально самодостаточен, из стороннего софта используется только mkpsxiso для создания образов дисков.

От разработчика:
«Я начал изучать PlayStation в начале 2010-х. Началось все с того, что я научился компилировать проги при помощи утекшего в Сеть старого официального SDK PsyQ, который использует C89. Именно на нем было создано большинство хитов. С ним работать довольно удобно, несмотря на то, что это древний софт, написанный еще в эпоху Windows 95. Но мне показалось, что как-то нехорошо зависеть от пиратского ПО, пусть и заброшенного. К тому же, PsyQ закрытый, его невозможно модифицировать. Поэтому я взялся писать собственную графическую библиотеку PSXLib. Дело пошло, я довольно глубоко погрузился в детали на уровне ассемблера, но мне ни один существующий ассемблер для консоли не понравился по ряду причин, и я решил сделать свой собственный, который назвал Retrolang, попутно изучив архитектуру MIPS-I и протокол загрузки PlayStation во всех деталях. Впоследствии, в 2026 году, я расширил этот инструмент, превратив его в компилятор, и одновременно адаптировал к нему PSXLib, расширив и улучшив ее (теперь она называется Retrolib). Тогда же я добавил в комплект дополнительные утилиты, необходимые для подготовки ресурсов для PS-игр».
Retrolang можно охарактеризовать как «ANSI C из параллельной вселенной». Это простой C-подобный процедурный язык, специально спроектированный для программ, работающих в условиях крайне ограниченного объема памяти. Он поддерживает базовые целочисленные типы и указатели на них. Есть приведение типов, статические массивы, строки, структуры. Реализованы все основные арифметические, логические и побитовые операторы и операторы потока управления. Типизация в языке слабая — это сделано намеренно, потому что язык представляет собой весьма тонкую семантическую надстройку над машинной логикой. Двоично совместимые типы неявно конвертируются друг в друга, в том числе и любые указатели, а также указатели и 32-битные целые. Доступ к памяти неограниченный, спецификаторов доступа (const и т. п.) нет.
В отличие от C, Retrolang реализует некоторые низкоуровневые возможности PlayStation в виде интринсиков — встроенных инструкций компилятора, которые разворачиваются не в обычные вызовы, а специальные блоки машинного кода. Это позволяет использовать функции BIOS и команды GTE без необходимости написания частей программы на языке ассемблера. Язык, тем не менее, включает также и полнофункциональный встроенный ассемблер MIPS-I.
SDK предоставляет системную библиотеку под названием Retrolib, которая облегчает работу с аппаратным обеспечением:
- Работа с GPU, рендеринг 2D и 3D-графики - напрямую или через командные буферы и DMA;
- Чтение файлов TIM и загрузка в видеопамять;
- Работа с геймпадом;
- Работа с BIOS, в том числе установка обработчиков прерываний;
- Работа с CD-ROM;
- Работа с картами памяти;
- Воспроизведение музыки CD Audio и XA;
- Воспроизведение видео STR.
В состав SDK входят следующие программы:
- RLC — компилятор языка Retrolang, по совместительству ассемблер и линкер;
- Retrobuild — система автоматизации сборки;
- PSXDISASM — дизассемблер бинарников MIPS-I;
- PNG2TIM — конвертер изображений PNG в формат TIM;
- WAV2VAG — конвертер звуков WAV в VAG;
- XA Tool — кодировщик/интерливер потоков XA;
- SEQ Tool — программа для конвертации музыки в формат SEQ. Не имеет аналогов в других SDK;
- DATWrite — генератор патча системной зоны диска для вставки в образ лицензионной информации. Прилагается аддон-экспортер для Blender, при помощи которого можно создать свою TMD-модель логотипа для загрузочного экрана игры;
- GPSXEmu — эмулятор PlayStation на ранней стадии разработки.
Репозиторий проекта: https://github.com/gecko0307/retrolang