Ole*_*yuk 1 assembly gnu-assembler ld
我正在尝试将游戏转换为苏联 PDP11 兼容机。由于它有严格的内存限制 - 56K RAM,我必须在运行时加载部分代码。这意味着我需要构建几个相互交叉引用符号的二进制模块。我用的是GAS和LD。
有没有办法仅使用这些工具来完成此任务?
例如,一个二进制模块文件想要加载另一个二进制模块,为此它必须知道另一个二进制文件的大小。尺寸可以作为符号使用,如下所示:
.title OtherModule
begin:
some code
end:
.equiv SizeOfTheOtherModuleInWords, ((end - begin) / 2)
Run Code Online (Sandbox Code Playgroud)
另一个例子,游戏中的每个级别单独加载,并包含从始终驻留在内存中的主引擎调用子例程的代码。
我通过链接器脚本找到了解决方案。我可以使用/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
}
}
Run Code Online (Sandbox Code Playgroud)