Sigmatel完全固件修改
发布时间:2007/8/20 0:00:00 访问次数:676
经过本人对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控制线。
三星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坐标。
经过本人对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控制线。
三星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坐标。