我的头像小萧的开源知识站首页标签系列

编写汇编代码以加载字库

撰写日期 2024-07-01 阅读大约用时 2 分钟

本人不是很有自信能写好这个教程,加上本人时间紧张没法保证能稳定更新,如果有疏漏或者疑问请在评论区指出,非常感谢! 首先非常感谢指导我学习 NDS 游戏破解的 Enler 大佬,如果没有他我的童年回忆的汉化和这个破解教程就不能实现了,非常感谢!

本教程的破解源代码(流星洛克人一代汉化的汉化破解源代码)将会在汉化完成后整理(为了尊重汉化组劳动成果,仅包含我之前乱翻的测试文本)并传到 Github 上,届时大家可以自行查看学习。

如果你是初次接触老游戏机游戏的破解,我个人先建议你去尝试一下简单的游戏破解教程: https://www.bilibili.com/read/cv18346849/

前言

本文其实应该需要提前准备好字库以使用的(或者其他传统说法叫做字模),考虑到大家更加匮乏的是编写汇编代码的过程,而字库生成的方式可以自行设计,所以先讲解汇编代码的内容。

同时,这篇文章需要你对 ARM/THUMB 指令集有一定基础了解,且对计算机工作原理也要一定了解,否则阅读起来会非常吃力!

字库?

上面前言说了,我为了尽可能节省文章篇幅,跳过了制作字库的部分,那么我们先假设我们有这么一种字库:

所有字体尺寸都是 16x16 像素(虽然以实际情况来说,流星洛克人的主字体实际的显示尺寸是 12x12),且按照 GBA 4BPP 方式存储,即一个字体占用 16×16÷2=128 字节。 然后每个字形数据紧密相连,没有空隙。

此处待做事项:字体数据可视化

如果按照这种方式存储的话,大家可以想象一下之后我们读取每个字形数据的时候,应该只需要将 字形索引编号 乘以 32,然后加上字库的起始地址(对于如果会把字库载入到整个内存的情况来说的话需要),就可以得到这个字形的数据了。

介于如何生成或者制作字库的方法,可以自行编写 Python 脚本或其他程序实现,这里不再赘述。

确认需要插入汇编代码的位置