屏幕绘制使用的函数为0x008372,该函数实际上为0x0082f6字符绘制函数的一部分.
在0x00836a处该函数调用了0x0085b8,将小字体字模加载到栈内,随后在er12内存入其地址.小字体字模每行由一个字节存储,该字节的二进制形式每个比特代表一个像素.
若选择0x008372为函数入点,则可令其绘制我们自己的字模.此时需满足:
er6:绘制的坐标
r4:字符宽度(此程序中为3像素)
er12:字模地址(此程序中字模为0xE0)
[FP-1]:屏幕缓冲区每行字节数(即0x18)
[FP-4]:屏幕缓冲区结尾地址(0xE3D3,用于判断所绘制的内容是否已超出屏幕外,实际足够大即可)
[FP-6]:此处的两个字节分别为字符宽度与8-字符宽度,此程序中为0305
[FP-10]:此处的两个字节存储字模行数信息,每轮循环后程序会判断[FP-9]是否大于[FP-10],并将[FP-9]加1.但若程序判断已经完成绘制(二者相等),则会强制在最下方绘制一行空白.因此本程序中调用函数时使[FP-9]大于[FP-10],但此时每次调用只能绘制一行像素.
进入函数后,其调用0x008750将坐标转换为屏幕缓冲区内的对应地址.地址存储在er10及[er2]内,r0存储该坐标在此地址内偏移的比特数.
在0x008390处该函数会判断字体设置,因此在启动程序前应先设置为小字体模式.