Cross-Lib — это ретро-аппаратный уровень абстракции для кодирования «универсальных» игр с одним и тем же кодом для сотен преимущественно 8-битных систем (консолей, компьютеров, научных калькуляторов, портативных консолей, игровых автоматов, взломанных игрушечных компьютеров и т. д.). .).
Cross-Lib — это платформа WORA (Write Once Run Anywhere) для старинных систем, т.е. вы один раз кодируете игру абстрактным, не зависящим от оборудования способом, а Cross-Lib создает одну и ту же игру примерно для 200 старинных систем.
СТАТЬЯ О КРОСС-ЛИБЕ
Статья на английском языке (обновленная и измененная версия статьи, опубликованной в CALL Apple Volume 3 Number 1 (январь 2023 г.): https://github.com/Fabrizio-Caruso/C...lishArticle.md
Статья на французском языке (впервые опубликована во французском журнале Programmez! Hors série #6), в которой подробно описывается Cross-Lib. https://github.com/Fabrizio-Caruso/C...LIB_PUBLIC.pdf
ИГРЫ
Эти игры являются доказательством гибкости Cross-Lib .
Играйте в игры онлайн:
ПОДДЕРЖИВАЕМЫЕ В НАСТОЯЩЕЕ ВРЕМЯ СИСТЕМЫ И АРХИТЕКТУРЫ
Cross-Lib можно использовать для создания игр примерно для 200 различных старинных систем (компьютеров, консолей, портативных устройств, игровых автоматов, научных карманных калькуляторов и т. д.). Неполный список поддерживаемых систем с их статусом находится в:
https://github.com/Fabrizio-Caruso/C...docs/STATUS.md
Наиболее важными поддерживаемыми старинными архитектурами ЦП являются:
- COSMAC RCA 1802
- Intel 8080
- MOS 6502
- Motorola 6803
- Motorola 6809
- TMS 9900
- Zilog 80
Cross-Lib также имеет экспериментальную поддержку старинных 16-битных и 32-битных систем, а также встроенной консоли ПК.
Более полный список архитектур вы можете посмотреть:
ИНСТРУМЕНТАРИЙ
Cross-Lib предоставляет полный набор инструментов для создания универсальных винтажных 8-битных игр.
Межбиблиотечные компоненты
Cross-Lib обеспечивает:
- библиотека с аппаратно-независимыми API для разработки игр;
- сценарии, которые автоматически преобразуют графические ресурсы, независимые от компилятора, в форматы графических ресурсов, специфичные для целевых объектов;
- make-файлы, управляющие процессом сборки;
- «удобный» скрипт xl для управления игровыми проектами.
Процесс сборки
Когда игра создается для конкретной цели, набор инструментов Cross-Lib автоматически:
- при необходимости конвертировать абстрактные графические ресурсы в графические ресурсы для заданной цели на лету;
- скомпилировать код игры (и игровые ресурсы для конкретной цели) с помощью соответствующего компилятора;
- при необходимости, по возможности, создайте образ диска/кассеты/картриджа.
В большинстве случаев пользователю достаточно будет
- написать на C игру, использующую Cross-Lib API;
- рисовать графические ресурсы;
- запустите xl скрипт для создания, сборки и тестирования игры.
Сценарий xl запустит полный процесс сборки, в результате которого будет создана целевая версия проекта или массово построен один и тот же проект для нескольких целей (или даже будет построено несколько проектов для одной или нескольких целей).
ПРЕДПОСЫЛКИ
Cross-Lib предназначен для использования в среде POSIX (Windows+Cygwin, Linux и т. д.).
Для получения более подробной информации о предварительных условиях мы обращаемся к:
АППАРАТНО-НЕЗАВИСИМЫЙ КОД
Благодаря API Cross-Lib код игры может быть независимым от аппаратного обеспечения. Однако использования только API-интерфейсов Cross-Lib недостаточно, поскольку Cross-Lib охватывает цели, имеющие разные размеры и форму экрана, а также цели, которым не хватает некоторых аппаратных функций, таких как графика, цвета, звуки.
ANSI C (подмножество)
Код должен быть скомпилирован несколькими разными компиляторами, которые не обязательно поддерживают последнюю версию стандарта C. Поэтому его следует писать в подмножестве ANSI C89, который является общим для всех поддерживаемых компиляторов.
Этот подмножество можно описать (в основном) как ANSI C89 без:
- вещественных типов;
- копирования struct, присвоения, параметры (вместо этого используйте указатели на struct);
Более того, из соображений производительности лучше избегать рекурсии (поскольку это приводит к чрезвычайно высоким затратам на целях MOS 6502).
- динамически выделяемой памяти (malloc, free).
Доступны некоторые функции C99:
- Разрешены современные комментарии вида //
- stdint.h недоступен, но есть типы uint8_t и uint16_t (без необходимости дополнительной директивы include).
Размер экрана
Использование API Cross-Lib недостаточно, поскольку размер и форма экрана могут быть разными. Cross-Lib предоставляет константу XSize для ширины экрана и константу YSize для высоты экрана. Оба этих макроса измеряются количеством плиток. Код игры должен опираться на дроби XSize и YSize и никогда не использовать жестко запрограммированные размеры или использовать условные директивы для охвата всех размеров. Таким образом, после компиляции игра автоматически адаптируется к размеру экрана цели.
Тайловая графика
Графика в Cross-Lib основана на плитках, поскольку это единственная возможная графика, которая может поддерживаться всеми целями. Для целей с графикой форма плиток определяется только во время компиляции и не может быть переопределена. Таким образом, для целей с графикой плавно движущиеся спрайты можно реализовать только как программные спрайты через предварительно сдвинутые тайлы.
Большинство целей с графикой имеют плитки размером 8x8 пикселей, но некоторые другие цели с графикой имеют другую форму. Поэтому не реализуйте логику, которая предполагает только тайлы размером 8x8 пикселей (например, при реализации программных спрайтов с предварительно сдвинутыми тайлами). Если вы хотите поддерживать цели без графики (т. е. плитки просто сопоставляются с символами ASCII), вы либо избегаете кода, который зависит от формы плиток, либо вам придется реализовать альтернативную версию для неграфических целей.
Дополнительные снимки можно найти по адресу:
Цвета, звуки и графика
Некоторые цели не имеют цветов или цвета текста, звуков или графики. Так что не пишите никакой логики, опирающейся только на наличие цветов/звуков/графики; или, если да, используйте условные директивы для реализации альтернативной логики для целей без цветов/звуков/графики.
API-интерфейсы CROSS-LIB
Cross-Lib предоставляет несколько API, которые позволяют кодировать игры независимо от оборудования для всех поддерживаемых целей. Доступные на данный момент API описаны на странице
БУДУЩЕЕ
Основными целями на будущее являются
- улучшение открытых API
- поддержка большего количества кросс-компиляторов, собственных компиляторов, систем и подцелей
- добавление дополнительных функций в Cross-Lib (например, больше переопределяемых плиток, больше звуковых эффектов и т. д.)
- кодирование более универсальных игр и демо


Ответить с цитированием
Размещение рекламы на форуме способствует его дальнейшему развитию 
