爱技术

 找回密码
 注册会员

QQ登录

只需一步,快速开始

微信登录

微信扫一扫,快速登录

搜索
查看: 1558|回复: 21
收起左侧

6688库函数整理

[复制链接]
发表于 2008-10-20 18:16:38 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?注册会员 微信登录

x
根据SL45_5601版的资料整理的一些6688V5508版的自带的常用库函数

狼大的文章是这样说明的:
在Flash程序中,一些寄存器有固定的习惯用法。R12,R13,R14,R15作为传入参数,而R4和R5作为传出参数,R0被用为系统栈。

提到的一些函数,有我们常用,还有些只有FLASH程序自己用,补丁修改没有用过.
补丁的说明很简单,举例一般是有补丁修改用过的,还有些是从FLASH自身ROM中拷贝出来的,可能一些寄存器用法和反汇编说明不太一致
有些字串字符显示的可能无法显示中文字符。

...仅供参考,欢迎指出不对的地方



01) DisplayMessageBox :提示框


        mov        r12, flag                       ;标识 #1=boxed有边框, 标识 #2=unboxed 无边框
        mov        r13, textID                     ;插入字串
        calls        E604A8                       ; 类型1: with V icon对构号图片 DAE6A804

        mov        r12, flag
        mov        r13, textID
        calls       E60508                        ; 类型2:with ! icon惊叹号图片 DAE60805  
举例:
E01CE6FD6104DAE608050DB00


02) StringCopy :字串拷贝

        mov        r12, dst_offset                ;目标
        mov        r13, dst_page
        mov        r14, src_Offset                ; 源
        mov        r15, src_page
        calls      C784A6                        ; DAC7A684
举例:短信计数
0x4458A0: FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DAE4D659DAE4AE59F0C066FCFF3FF2FD
0x4458B0: FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 02FEE6FE1018E6FF9103DAC7A684


03) MoveWord :移动字符

        mov        r4, src_offset                ;目标
        mov        r5, src_page                        ; 源
        mov        r10, dst_offset
        mov        r11, dst_page
        mov        r3, word_count                 ;长度
        calls       C7EE0A                        ;DAC70AEE

举例:增加待机图片预览
0x1F49C0: FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF E6F44828E0C5E6FB2000E00AE6F38001
0x1F49D0: FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DAC70AEEE6F61D00DB00



04) Indirect Call :间接调用(callR4...R5)

        mov        r4, func_offset
        mov        r5, func_page                ,callR5R4
        calls       C788EE                        ;DAC788EE

举例:
0x482610:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF E6F4F6F9E00C88C088C088C0E6FCA002
0x482620:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 88C0E6FC5C14E6FDC01FE6FE3400E00F
0x482630:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF E6F5B400DAC788EE06F00800DB00FFFF


05) Run Java File :运行JAVA文件

        mov     r12, filename_offset        ;文件名(应该包含路径)
        mov     r13, filename_page
        mov     r14, flag                ; 标识:#0 = list 清单, #1 = run 运行
        calls    BAE796                        ;DABA96E7

举例:
0330228: F0 C8 F0 D9 06 FC B2 00 E0 1E DA BA 96 E7


06) Draw Image (Screen must be prepared) :显示图片(屏幕必须准备好的--->显示挂钩或DA执行调用)

        mov        r14, image_index        ;图片号码
        mov        r12, x_pos                ;X坐标
        mov        r13, y_pos                ;Y坐标
        calls        B3DF04                ;DAB304DF

举例:
E00CE6FD4200E6FE1901DAB304DF



07) Write Data to EEPROM :往EEP块写入数据

        mov        r12, #0
        mov        [-r0], r12
        mov        [-r0], r12
        mov        [-r0], r12
        mov        r12,                         ;size长度
        mov        [-r0], r12
        mov        r12, EEPROM_Block                ;EEP块名称
        mov        r13, data_Offset                ;源数据
        mov        r14, data_Page
        mov        r15, offset
        calls       B4FA4A                        ;DAB44AFA
        add        r0, #8

举例:
E00C88C088C088C0E6FCA002DADB8ECD88C0E6FCC313E6FD1C00E6FE2000E00F
DAB44AFA06F00800DB00




08 ) Read Data from EEPROM (method 1) :从EEP中读取数据(方法1)

        mov        r12, #0
        mov        [-r0], r12
        mov        [-r0], r12
        mov        [-r0], r12
        mov        r12, size
        mov        [-r0], r12
        mov        r12, EEPROM_Block                ;EEP块名称
        mov        r13, dst_Offset                ;目标
        mov        r14, dst_Page
        mov        r15, offset
        calls       B4F9F6                        ;DAB4F6F9
        add        r0, #8

举例:
00447960:E00C88C088C088C0E6FC120088C0E6FC
00447970:AE13E6FDD621E01EE00FDAB4F6F906F0
00447980:0800DB00


08 ) Read Data from EEPROM (method 2) ::从EEP中读取数据(方法2)

        mov        r12, size
        mov        [-r0], r2
        mov        r12, EEPROM_Block                ;EEP块名称
        mov        r13, dst_Offset                ;目标
        mov        r14, dst_Page
        mov        r15, offset
        calls       B4FB72                        ;DAB472FB
        add        r0, #2

举例:
0x483D80: E008888088808880E0498890E6FC2C14E08D00D066FDFF3FF2FE02FEF0F8DAB4
0x483DA0: 72FB06F00800



09) GetLength :取得字串长度

        mov        r12, string_offset
        mov        r13, string_page
        calls        C78536                        ;DAC73685  输出output = r4

举例:
0024ac8c:E6003000CC00F2FC943EF2FD963EDAC7
0024ac9c:3685E600


10) CopyArray :字符拷贝

        mov        r12, size                        ;长度
        mov        [-r0], r12
        mov        r12, src_offset                ;源
        mov        r13, src_page
        mov        r14, dst_offset                ;目标
        mov        r15, dst_page
        calls       C7859E                        ;DAC79E85

举例:
8810E6F110008810E6FC403DE6FD1100E6FED01DE6FF
FC02DAC79E8508029810


11) Get Word Value :取值

        mov        r12, string_offset
        mov        r13, string_page
        calls       C782E6                        ;DAC7E682;输出 output = r4

举例:
01f0894: E6 FC 62 03 E6 FD 36 00 DA C7 E6 82



12) Get Double Word Value :取值(寄存器r4,r5输出)

        mov        r12, string_offset
        mov        r13, string_page
        calls       C77EBA                       ;DAC77EBA;输出 output = r4,r5

举例:FLASH没有用到过...


13) Get Word :取得字符

        mov        r12, data_offset
        mov        r13, data_page
        calls       C78356                        ;DAC75683 output = r4

举例:
011fe30: 66 FC FF 3F F2 FD 02 FE DA C7 56 83


14) Get Double Word :取得字符(寄存器r4,r5输出)

        mov        r12, data_offset
        mov        r13, data_page
        calls        C78344                       ;DAC74483 output = r4:r5

举例
0155368: 66 FC FF 3F F2 FD 02 FE DA C7 44 83


15) FillChar :strset

        mov        r12, dst_offset                ;目标
        mov        r13, dst_page
        mov        r14, char               
        mov        r15, size                        ;长度
        calls        C78416                        ;DAC71684

举例:
0x1FA030: FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 45060D15E6FCC005E6FD3200E6FEFF00
0x1FA040: FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF E0FFDAC71684





16) Display Free String without Box :显示自由字串(不带边框)

        mov        r12, text_offset                ;文本
        mov        r13, text_page
        calls        BD9F58                        ;DABD589F

举例:
001d2e64: E6 FC B7 2E E6 FD F4 02 DA BD 58





17) Find substring :寻找替代字串

        mov     r12, string_offset
        mov     r13, string_page
        mov     r14, substring_offset
        mov     r15, substring_page
        calls    C785F0                ;DAC7F085

0036cd64: F0 C6 F0 D7 E6 FE 60 24 E6 FF 5B 03 DA C7 F0 85

评分

参与人数 1实力分 +1 金钱数 +100 技术分 +10 贡献分 +10 收起 理由
qqqingren + 1 + 100 + 10 + 10 辛苦了

查看全部评分

发表于 2008-10-20 18:28:55 | 显示全部楼层
看不懂,但也支持。。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-10-20 18:36:32 | 显示全部楼层

回复 2# XJWSYXY 的帖子

有一些是我们常用的,应该能看懂...

折腾6688的时间越来越少了,希望还有人能坚持补丁修改,也希望有新人能加入修改的行列...6688的潜力还很大,魅力不减当年...
回复 支持 反对

使用道具 举报

发表于 2008-10-20 19:44:57 | 显示全部楼层
我正需要这个,谢谢了!
回复 支持 反对

使用道具 举报

发表于 2008-10-20 19:47:56 | 显示全部楼层
谢谢  谢谢
回复 支持 反对

使用道具 举报

发表于 2008-10-20 19:55:00 | 显示全部楼层
如果MM来研究下65 ,85就好了:/kka
回复 支持 反对

使用道具 举报

发表于 2008-10-20 23:10:46 | 显示全部楼层
这个非常好

谢谢分享
回复 支持 反对

使用道具 举报

发表于 2008-10-20 23:18:19 | 显示全部楼层
玩得多65 /75系统,现在连小八的补丁都不会看了
回复 支持 反对

使用道具 举报

发表于 2008-10-21 09:42:36 | 显示全部楼层
谢谢云MM分享
回复 支持 反对

使用道具 举报

发表于 2008-10-21 10:59:40 | 显示全部楼层
云mm,你好!请教一个问题:

想比较两个寄存器存放的数的大小,然后根据比较的结果(大、小、等于)进行跳转,应该怎么写代码?

比如:r14取值0900,r15取值1100,然后比较r14和r15的大小,跳转到下一句。

还有,寄存器r14取值0900是否这么写:E6FE0900  ?
回复 支持 反对

使用道具 举报

发表于 2008-10-21 16:29:03 | 显示全部楼层
看不懂也支持~~~~~~~~~~~~~
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-10-21 18:04:17 | 显示全部楼层

回复 10# Wang 的帖子

40;CMP 比对
E6;MOV 取值

参考C166指令可以看到CMP和MOV的命令代码有很多,具体有什么区别和限制我也不清楚自己可以实践一下

r14取值0900,r15取值1100,然后比较r14和r15的大小

40ED;比较r15和r14
4054;比较r5和r4

不过自己定义寄存器没有前提条件的话可以不用R12,R13,R14,R15
回复 支持 反对

使用道具 举报

发表于 2008-10-21 23:44:49 | 显示全部楼层

回复 12# 云卷.云舒 的帖子

明白了,我试试。谢谢云mm!
回复 支持 反对

使用道具 举报

发表于 2008-10-23 09:17:29 | 显示全部楼层
http://mobile.0110.cn/viewthread.php?tid=382555

                               
登录/注册后可看大图

用C语言函数的形式表达出来是不是更直观一些呢
回复 支持 反对

使用道具 举报

发表于 2008-10-23 15:27:32 | 显示全部楼层

回复 14# BingK 的帖子

不是  以机器码的形式表述更好理解与应用
回复 支持 反对

使用道具 举报

发表于 2008-10-23 19:03:24 | 显示全部楼层

回复 15# qqqingren 的帖子


                               
登录/注册后可看大图


原来各位弄补丁都直接汇编的啊
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-10-24 00:15:52 | 显示全部楼层
原帖由 binghelingxi 于 2008-10-23 19:03 发表

                               
登录/注册后可看大图


原来各位弄补丁都直接汇编的啊


惭愧,不懂C语言,汇编也是生吞活剥的...最近想找robin,他会搞C的,看能不能把6688区号秀加进短信显示...
回复 支持 反对

使用道具 举报

发表于 2008-10-30 22:48:51 | 显示全部楼层
看到各位高人,只是感到学得太少了。
回复 支持 反对

使用道具 举报

发表于 2008-11-1 17:27:20 | 显示全部楼层

回复 16# binghelingxi 的帖子

其实现在更多的时候直接用机器码  呵呵   更快
回复 支持 反对

使用道具 举报

发表于 2008-11-6 17:53:24 | 显示全部楼层

回复 19# qqqingren 的帖子


                               
登录/注册后可看大图

呃,我觉得的小型补丁的话,直接汇编方便快捷,很不错

如果补丁大的话,还是借助高级语言实现舒服,不容易出错,看起来也省力些,还可能借助编译器优化代码。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员 微信登录

本版积分规则

小黑屋|Archiver|手机版|爱技术 ( 沪ICP备08115260号-3 )

GMT+8, 2025-6-20 15:18

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表