Я пытаюсь конвертировать игру для советской машины, совместимой с PDP11. Поскольку он имеет строгое ограничение памяти - 56 КБ ОЗУ, я должен загрузить некоторую часть кода во время выполнения.
Это означает, что мне нужно создать несколько двоичных модулей, которые ссылаются друг на друга.
Я использую ГАЗ и ЛД.
Есть ли способ сделать это, просто используя эти инструменты?
Например, один файл двоичного модуля хочет загрузить другой двоичный модуль, для этого ему нужно знать размер другого двоичного файла.
Размер доступен в виде символа:
.title OtherModule
begin:
some code
end:
.equiv SizeOfTheOtherModuleInWords, ((end - begin) / 2)
Другой пример, каждый уровень в игре загружается отдельно и содержит код, который вызывает подпрограммы из основного движка, который всегда находится в памяти.
Я нашел решение через скрипт компоновщика. Я могу использовать раздел /DISCARD/
, чтобы исключить файлы из ссылок.
OUTPUT_FORMAT("binary")
OUTPUT_ARCH(pdp11)
INPUT(core.o bootstrap.o)
OUTPUT(AKU.SAV)
FileSizeCoreWords = ((FileEndCore - FileBeginCore) / 2);
SECTIONS
{
. = 0;
.text :
{
bootstrap.o (.text)
}
.data :
{
bootstrap.o (.data)
}
.bss :
{
bootstrap.o (.bss)
}
/DISCARD/ :
{
core.o
}
}