经过本人对Sigmatel固件将近一年分析修改, 总结出以下6点修改方法,给各位对DIY固件感兴趣的朋友共享一下 1.改LCD初始化参数 如果LCD没有显示或显示对比度很高,那就需要换LCD控制芯片初始化参数。 LCDLCD控制芯片初始化参数一般如下形式,00000C 00002F 000042 0000A6 0000A4 000021 0000A1 000081 00001A 0000AF 0000E0 0000C8 0000A1,这组参数位于resource.bin文件内,没有查找改数据的好办法,只能死找,看到相似的就是, 用上面这段参数替换(适合V128的LCD)。 : 如果显示上下相反,把0000C8改成0000C0 如果显示左右相反,把0000A1改成0000A0 特殊情况可能还要换LCD控制线。 三星samsung YEPP55固件就发现这个问题,经过如下修改LCD才有显示 BSET #$0A,X:$00F40M 换成 BSET #$09,X:$00F40M M=(0,1,3,9) BSET #$09,X:$00F40M 换成 BSET #$0A,X:$00F40M 2.改对比度 如果还发现对比度过高,那就需要改对比度数据,用RESEDIT查找000081(LCD对比度设置命令),找到如下形式的程序段,将后一个参数改小。 MOVE #$000081,A //设置命令 JSR $lcdcmd ... MOV #$00001D,A //对比度参数 ... JSR $lcdcmd 例如:YP55可以找到如下程序段: MOVE #$000081,A //设置命令 JSR $XXXX ... ... MOV #$00001D,B //对比度参数 ADD B,A JSR $XXXX 3. 替换字库 修改字库一般采用替换法,就是从其他固件里导出字库,再导入目标固件。 第一步,先确定字库数据段位置。用RESEDIT打开固件,列表中间的数字是数据类型,字库数据由类型为2和9的几个数据段组成, 一般为2 9 9 9 2 9 图中315~31A的数据就是字库数据。 : 第二步:导出字库。用RESEDIT从源固件内一一导出这些数据。 第三步:导入字库。用RESEDIT打开目标固件,一一对应导入这些数据。注意:导入时一定要用我写的那个RESEDIT,RESEDIT会对数据段重新分配大小,而其他软件可能会丢失部分数据。 4.背光 如遇到背光常亮,先查找2f700a11f400(BSET #$0F,X:$00F411) 替换成000000000000(NOP),将其屏蔽,然后用排除法,排除LCD,FM控制等位指令,将余下的位指令逐一替换成2f700a11f400测试。 例如 YEPP55的背光 BSET #$09,X:$00F401 换成 Bclr #$0f,X:$00F411 Bclr #$09,X:$00F401 换成 BSET #$0f,X:$00F411 5.图位置修改方法: 这是固件里最难的一步,因为LCD显示屏大小不同,可能需要对大量图片做大小转换并改变显示位置,往往有个别图片很难找到。 显示程序一般形式: MOVE B,X (X坐标) MOVE A0,ID (图片的ID,就是用资源分析软件打开看到的图片序号) MOVE A1,Y (Y坐标) MOVE Y0,#$03000X MOVE A0,Y:(R7)++ MOVE B,Y:(R7)++ MOVE A,Y:(R7)++ .... .... JSR $00XXXX 先找到图片ID,如图 (注意这个数字是10进制) : 10进制的490转成16进制为1EA,就能找到下面程序段。 更改 MOVE #$000024,A 就可以改变X坐标, #$000010,B可以改变Y坐标。 : 固件里语句的顺序及所使用的寄存器都不一定和例子相同,所以查找方法只能根据图片ID,然后再更改坐标值试验, 用RESEDIT查找方便点,还有对于一些连续的图片,固件中可能只出现第一张图片的ID。 6.按键 按键改法比较烦琐,方法是反复更换按键定义数据,总结出规律。 按键数据区查找方法: 用SRDBIN反汇编,打开StmpSys.sb.txt,找到如下形式的数据段,括号内的区域即为按键数据区,其中80开头的是功能数据。 10 XXXX: 000000 000000 000000 000003 00F420 00F422 000002 00F410 00F412 080000 10 XXXX: 00F420 00F422 000004 000003 00F420 00F421 00F423 000001 00F410 00F411 10 XXXX: 00F413 800000 00F410 00F411 00F413 400000 000002 00F410 00F412 000400 10 XXXX: 00F410 00F412 000800 000000(000080 000001 000008 000020 000000 000002 10 XXXX: 000010 000000 000100 000200 000010 000002 800002 000008 800008 000100 10 XXXX: 800100 000000 800200 000010 800010 000080 800080 000020 800020 000200 10 XXXX: 800001)000000 000000 000000 000000 000100 000000 000000 000000 000100 然后再用SBEDIT打开stmpsys.sb,找到上述数据区后,更换试验。 : 看完相信大家可以体会到修改固件很烦,不是一时半会就能改成的,所以改固件最重要的一点是不能轻易放弃。以上是我这近一年来修改固件得出的经验。 |