爱技术

 找回密码
 注册会员

QQ登录

只需一步,快速开始

微信登录

微信扫一扫,快速登录

搜索
查看: 3020|回复: 3
收起左侧

【补丁源码交流】拨号显示号码+接通振动提示

[复制链接]
发表于 2005-8-10 00:00:00 | 显示全部楼层 |阅读模式

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

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

x
过几天要出去做事,所以抽空把这个东东发了,本来早就该发的,可是以前的版本一直都有些问题,现在的基本上稳定了。所以,发出来,希望能起到抛砖引玉的作用


$Segmented
$Mod167

;Some Function
DrawImagebyIndex EQU 0xB3DF04
GetVibraStatByProfile EQU 0xB5D570
pSendMessage        EQU 0xB4724C

;SOme Address
PatchBegin  EQU 0x1F2000

;原理,先把拨号中的号码提取出来按一定格式放在一个buffer中,然后在对这个buffer中的数据进行显示,buffer选的是0c:23c8
;比如拨1861,本来的存储是8116,提取出来就是01 08 06 01。
;--拨号显示拨号号码和振动提示---FOR 6688v55-------Jewes[SPGC]----------------------------------;  

patch section code word AT PatchBegin

  main proc far
                   extp   r15, #1
                 mov    r14, [r14]
                 cmp        r14,#0C6h
                 jmp        cc_z,begin_vibra
                 cmp        r14,#0c2h
                 jmp        cc_z,Numberinphone
                 cmp        r14,#0c3h
                 jmp        cc_z,Numberinphone
                 cmp        r14,#0CAH
                 jmp        cc_c,clear
                 cmp        r14,#0CDh
                 jmp        cc_UGT,clear
                 ;判断是否在电话本中有,如果存在了电话本中则显示号码
                    extp        #0Ch,#1
                 movb        rl4,2b84h
                 cmpb        rl4,#0
                 jmp        cc_z,Numberinphone
                 callr        showdialnumber
Numberinphone:       
                 mov        r4,#1
                 jmp        cc_uc,out
                 
begin_vibra:
        extp         #0ch,#1
        mov          r4,23c6h
        cmp        r4,#0
        jmp        cc_z,out
        mov     [-r0],r12
          mov     [-r0],r13
          mov     [-r0],r14
          mov     [-r0],r15       
        calls        seg(Vibra+0xA00000),SOF(Vibra+0xA00000)
        mov     r15,[r0+]
        mov     r14,[r0+]
        mov     r13,[r0+]
        mov     r12,[r0+]
clear:        mov        r4,#0
out:       
        extp        #0ch,#1
        mov        23c6h,r4
        rets
  main endp
  ;用与来电时清除标志的,不然来电接电话也要振动
  ClearVibraFlag  proc far
  mov        r12,r9
  mov        r13,r6
  MOV        R4,#0
  extp        #0ch,#1
  mov        23c6h,r4
  RETS
  ClearVibraFlag  endp
  
  
          showdialnumber proc near
                   mov    [-r0], r1
                 mov    [-r0], r4
                 mov    [-r0], r12
                 mov    [-r0], r13
                 mov    [-r0], r14
                 mov    [-r0], r15
                 mov        r14,#23c8h
                 mov         r15,#2b85h
                 ;用1861来测试的
                 ;把8116格式的内容转换成01 08 06 01 0F格式的放在0c:23c8h
loop:                 extp        #0ch,#1
                 movb        rl1,[r15+]
                 movb        rh1,rl1
                 
                 cmpb        rl1,#0FFh
                 jmp         cc_z,wordend;如果是偶数
                 
                 cmpb        rl1,#0
                 jmp           cc_z,doublezero
                 
                 addb        rl1,#0F0H;如果是奇数
                 cmpb        rl1,#0F0h
                 jmp        cc_z,wordnearend
                 mov        rl1,rh1
                 mov        rh1,#0
                 shl        r1,#4
                 mov        r4,r1
                 and        r4,#0FFh
                 shr        r4,#4
                 mov        rl1,rl4;r1=0801
                 callr  save
                 jmp        cc_uc,loop
wordnearend:
                 movb        rl1,rh1
                 andb        rl1,#0fh
                 movb        rh1,#0FFh
                 callr  save
                 jmp        cc_uc,begintoshow
                 
wordend:         
                 movb        rl1,#0Fh
                 extp        #0ch,#1
                 movb        [r14],rl1
                 jmp        cc_uc,begintoshow
doublezero:                 
                 mov        r1,#0
                 callr        save
                 jmp        cc_uc,loop
                 ;开始显示,上面的已验证正确!
begintoshow:       
                 callr        getlen
                 cmp        r4,#0bh;判断号码长度是否大于11位,因为一般手机和长途电话都是11位
                 jmp        cc_ULT,small
                 sub        r4,#0bh
                 mov        r12,#11h
                 jmp        cc_uc,start
                 
small:                 mov        r12,r4;自动居中
                 shl        r12,#2
                 shl        r4,#1
                 add        r12,r4
                 neg        r12
                 add        r12,#100
                 shr        r12,#1
                 mov        r4,#0
                 
start:                                  
                 add        r4,#23c8H
loop2:                 
                 
                 extp        #0ch,#1
                 movb        rl1,[r4+]
                 cmpb        rl1,#0Fh
                 jmp        cc_z,showover
                 movbz        r14,rl1
                 callr showpic
                 jmp        cc_uc,loop2

showover:                 
                  mov    r15, [r0+]
                 mov    r14, [r0+]
                 mov    r13, [r0+]
                 mov    r12, [r0+]
                 mov    r4, [r0+]
                 mov    r1, [r0+]
                 ret
          showdialnumber endp
        ;把r1中的数放在buffer中
        save proc near
        extp        #0ch,#1
        mov        [r14],r1
        add        r14,#2
        ret
        save endp
        ;返回号码的长度
        getlen proc near
        mov        r14,#23c8h
        mov        r4,#0
loop1:       
        extp        #0ch,#1
        movb        rl1,[r14+]
        cmpb        rl1,#0FFH
        jmp        cc_z,exitwith0
        cmpb        rl1,#0FH
        jmp        cc_z,endofnumber
        add        r4,#1
        jmp        cc_uc,loop1
exitwith0:
        mov        r4,#0
endofnumber:       
        ret       
        getlen endp
       
        showpic proc near
                 
                 mov        [-r0],r4
                 mov        [-r0],r12
                 add        r14,#20dh
                 mov        r13,#0Ah
                 calls        seg(DrawImagebyIndex),sof(DrawImagebyIndex)
                 mov        r12,[r0+]
                 mov        r4,[r0+]
                 add        r12,#6
                 ret
        showpic endp
        ;自定义的振动函数,使得振动时间可以变短,振动可选以及声音提示可以修改这个函数
        Vibra  proc far
        calls         seg(GetVibraStatByProfile),sof(GetVibraStatByProfile)
        cmp        r4,#0
        jmp        cc_nz,V_out
        mov r12, #1                       
        mov [-r0], r12
        mov r13, #2
        mov [-r0], r13
        mov r12, #34C0h                  
        mov r13, #0Eh
        mov r14, #2   
        mov r15, #2FH
        calls seg(pSendMessage), sof(pSendMessage) ;发送消息
        add r0, #4
V_out:
        rets
        Vibra  endp
patch ends
End


发表于 2005-8-10 00:01:00 | 显示全部楼层
谢谢/
发表于 2005-8-10 00:02:00 | 显示全部楼层
请问jewes 用的什么汇编器将源代码汇编成机器代码?能否提供下载?
我用sfe等工具汇编时,有许多指令都不认。
发表于 2005-8-10 00:03:00 | 显示全部楼层
正好需要震动函数的那一块~~谢了,收下~~
您需要登录后才可以回帖 登录 | 注册会员 微信登录

本版积分规则

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

GMT+8, 2025-6-7 13:07

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2020, Tencent Cloud.

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