YP55固件修改去掉图标的方法
作者:作者:basicasm 上网日期:2004年09月03日   

这是本人改6.0时的去掉图标的方法,供固件爱好者们参考,7.1中改法类似,如有问题我再写篇7.1的改法。

一. 先分析确定首地址:


看图中这段代码:
00001 4CF000 move  Y:$003DA1,X0
00002 003DA1
00003 200046 and X0,A
00004 0ACC01 jclr #$01,A1,$C25D
00005 00C25D
00006 6CF000 move  Y:$003B91,R4
00007 003B91
00008 0BF080 jsr $007754
00009 007754
00010 56F400 move  #$000002,A
00011 000002
00012 0AF080 jmp $00C26E
00013 00C26E
00014 0ACC03 jclr #$03,A1,$C26C
00015 00C26C
00016 0BF080 jsr $00A98B
00017 00A98B
00018 059E60 movec Y:<$1E,M0
00019 69F000 move  Y:$003B91,R1

第12行有个无条件跳转指令,确定14行开始的代码是在12行之前转来的,而前12行只有第4行有条跳转指令,因此可以知道14行的地址为第4行的跳转目标地址,即$C25D
由此计算出第一行的地址为$c25d-$000D=$C250,当然这是第一段的首地址,不过根据本人经验各个代码段的首地址都相同,所以其他段的首地址不要再分析计算了.

二 查找显示代码

找到首地址后,在RESEDIT的首地址框里填入C250,根据STMP3410的公版电路图,可以知道bclr #$08,X:$00F401, bclr #$09,X:$00F401等指令是对LCD控制器读写操作的指令,就可以根据这线索查找显示程序,
搜索F401,在1E段可以找到下面的代码:


01407 0A700B bclr #$0B,X:$00F401
01408 00F401
01409 000000 nop
01410 000000 nop
01411 0A7009 bclr #$09,X:$00F403
01412 00F403
01413 000000 nop
01414 000000 nop
01415 0A7008 bclr #$08,X:$00F401
01416 00F401
01417 000000 nop
01418 000000 nop
01419 57F000 move  X:$00F401,B
01420 00F401
01421 46F400 move  #$FFFF00,Y0
01422 FFFF00
...
...
...
分析代码结合LCD控制器手册,可以得出这段代码是设置LCD命令的子程序.记下这子程序的地址(C7CE),继续搜索C7CE(即搜索调用该子程序的地址),可以找到显示程序,如图:


继续分析代码得出该子程序功能是设置LCM一个PAGE的数据,地址为$C7EC,继续搜索C7EC,得到显示程序地址,如图:


三 添加代码
在这段数据尾部添加如下程序:


02289 56F400 move  #$000000,A
02290 000000
02291 0BF080 jsr $00C7CE   ;LCM 命令子程序   *
02292 00C7CE
02293 56F400 move  #$000010,A
02294 000010
02295 0BF080 jsr $00C7CE  ;LCM 命令子程序   *
02296 00C7CE
02297 56F400 move  #$0000B8,A
02298 0000B8
02299 0BF080 jsr $00C7CE  ;LCM 命令子程序   *
02300 00C7CE
02301 066080 do #$060,$CB73  ;  *
02302 00CB73
02303 000000 nop
02304 000000 nop
02305 0A702B bset #$0B,X:$00F401
02306 00F401
02307 000000 nop
02308 000000 nop
02309 0A7009 bclr #$09,X:$00F403
02310 00F403
02311 0A7008 bclr #$08,X:$00F401
02312 00F401
02313 56F000 move  X:$00F401,A
02314 00F401
02315 47F400 move  #$FFFF00,Y1
02316 FFFF00
02317 200076 and Y1,A
02318 000000 nop
02319 000000 nop
02320 47F400 move  #$0000FF,Y1
02321 0000FF
02322 5FF400 move  #$000000,B
02323 000000
02324 20007E and Y1,B
02325 000000 nop
02326 000000 nop
02327 000000 nop
02328 000000 nop
02329 000000 nop
02330 000000 nop
02331 000000 nop
02332 21A700 move  B1,Y1
02333 200072 or Y1,A
02334 547000 move  A1,X:$00F401
02335 00F401
02336 000000 nop
02337 000000 nop
02338 0A7028 bset #$08,X:$00F401
02339 00F401
02340 000000 nop
02341 00000C rts

这段程序的功能是将LCD控制器图标区全部清零,这样图标就将不会显示,以上这段代码是通过分析HA128固件得出.
添加这段代码后,记下这段代码的首地址(CB40),然后移到上步找到的显示程序的尾步,添加一条跳转指令来调用刚才添加的程序段,(JMP $CB40) 见上图。
这样就完成了图标清除.

以上代码用在 7.1时,需对打*号代码重新计算地址。

  用名:   密码:    匿名发表
 内容: