【补丁源码交流】拨号显示号码+接通振动提示
过几天要出去做事,所以抽空把这个东东发了,本来早就该发的,可是以前的版本一直都有些问题,现在的基本上稳定了。所以,发出来,希望能起到抛砖引玉的作用$Segmented
$Mod167
;Some Function
DrawImagebyIndex EQU 0xB3DF04
GetVibraStatByProfile EQU 0xB5D570
pSendMessage EQU 0xB4724C
;SOme Address
PatchBeginEQU 0x1F2000
;原理,先把拨号中的号码提取出来按一定格式放在一个buffer中,然后在对这个buffer中的数据进行显示,buffer选的是0c:23c8
;比如拨1861,本来的存储是8116,提取出来就是01 08 06 01。
;--拨号显示拨号号码和振动提示---FOR 6688v55-------Jewes----------------------------------;
patch section code word AT PatchBegin
main proc far
extp r15, #1
mov 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,
mov r14,
mov r13,
mov r12,
clear: mov r4,#0
out:
extp #0ch,#1
mov 23c6h,r4
rets
main endp
;用与来电时清除标志的,不然来电接电话也要振动
ClearVibraFlagproc far
mov r12,r9
mov r13,r6
MOV R4,#0
extp #0ch,#1
mov 23c6h,r4
RETS
ClearVibraFlagendp
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,
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
callrsave
jmp cc_uc,loop
wordnearend:
movb rl1,rh1
andb rl1,#0fh
movb rh1,#0FFh
callrsave
jmp cc_uc,begintoshow
wordend:
movb rl1,#0Fh
extp #0ch,#1
movb ,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,
cmpb rl1,#0Fh
jmp cc_z,showover
movbz r14,rl1
callr showpic
jmp cc_uc,loop2
showover:
mov r15,
mov r14,
mov r13,
mov r12,
mov r4,
mov r1,
ret
showdialnumber endp
;把r1中的数放在buffer中
save proc near
extp #0ch,#1
mov ,r1
add r14,#2
ret
save endp
;返回号码的长度
getlen proc near
mov r14,#23c8h
mov r4,#0
loop1:
extp #0ch,#1
movb rl1,
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,
mov r4,
add r12,#6
ret
showpic endp
;自定义的振动函数,使得振动时间可以变短,振动可选以及声音提示可以修改这个函数
Vibraproc 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
Vibraendp
patch ends
End
谢谢/ 请问jewes 用的什么汇编器将源代码汇编成机器代码?能否提供下载?
我用sfe等工具汇编时,有许多指令都不认。 正好需要震动函数的那一块~~谢了,收下~~
页:
[1]