toodle 发表于 2005-8-11 00:00:00

【补丁源码】工模待机V1 - x618


$Segmented
$Mod167
;Some Function
DrawImagebyIndex EQU 0xC3896C
IsCallInProgress EQU 0xDC2A14
;Address for Patch Data
Patch_AddressEQU 7D27C0h
;调用地址:7047DC:06F01200 DAFDC027

; **/x618v24 -X- 04.04.09 - toodle - 工模待机V1
Patch Section Code Word At Patch_address ; Start Patch at Patch_Address
main proc far; start main of patch
      mov   [-r0], r4
      mov   [-r0], r5
      extp    #42h, #1
      mov   r4, 3EFCh
      jnb   r4.7, loc_End   ;个人设置为不显示
      extp    #5Bh, #1
      mov   r4, 14D2h
      jmpr    cc_Z, loc_End   ;有号码按下,不显示(这也是引起关闭屏保无显示的bug)
      calls   seg(IsCallInProgress),sof(IsCallInProgress)
      cmp   r4, #0
      jmpr    cc_NZ, loc_End;通话期间不显示
;       mov   [-r0], r6       ;断点7047DC可以不用保存这些寄存器
;       mov   [-r0], r12
;       mov   [-r0], r13
;       mov   [-r0], r14
;       mov   [-r0], r15
      extp    #5Bh, #1
      movb    rl4, 130Ch      ;RX(dB)数值
      movbz   r15, rl4
      movb    rl6, #3         ;整数位数
      movb    rh6, #0         ;小数位数
      mov   r4, #10         ;以10进制显示
      mov   r12, #15      ;X坐标(为简化计算,这里是最后一位数字的X坐标,而不是第一位数字的X坐标)
      mov   r13, #10      ;Y坐标
      callr   DrawNumber      ;↑↑↑↑↑↑↑↑↑↑显示以上数据↑↑↑↑↑↑↑↑↑↑
      extp    #43h, #1
      mov   r15, 228Ch      ;TE数值(绝对温度)
      sub   r15, #2745      ;换算成摄氏度,减去273度(2730);调整温度误差,再减1.5度(15)
      movb    rl6, #2         ;整数位数
      movb    rh6, #1         ;小数位数
;       mov   r4, #10         ;以10进制显示(这里r4没有变化,可以不用赋值以节省代码,下同)
      mov   r12, #49      ;X坐标(为简化计算,这里是最后一位数字的X坐标,而不是第一位数字的X坐标)
;       mov   r13, #10      ;Y坐标(这里r13没有变化,可以不用赋值以节省代码,下同)
      callr   DrawNumber      ;↑↑↑↑↑↑↑↑↑↑显示以上数据↑↑↑↑↑↑↑↑↑↑
      extp    #42h, #1
      mov   r15, 3E9Ch      ;VB数值
      movb    rl6, #1         ;整数位数
      movb    rh6, #3         ;小数位数
;       mov   r4, #10         ;以10进制显示
      mov   r12, #89      ;X坐标(为简化计算,这里是最后一位数字的X坐标,而不是第一位数字的X坐标)
;       mov   r13, #10      ;Y坐标
      callr   DrawNumber      ;↑↑↑↑↑↑↑↑↑↑显示以上数据↑↑↑↑↑↑↑↑↑↑
      extp    #42h, #1
      mov   r15, 3EB6h      ;mA数值
      movb    rl6, #3         ;整数位数
      movb    rh6, #0         ;小数位数
;       mov   r4, #10         ;以10进制显示
      mov   r12, #84      ;X坐标(为简化计算,这里是最后一位数字的X坐标,而不是第一位数字的X坐标)
      mov   r13, #44      ;Y坐标
      callr   DrawNumber      ;↑↑↑↑↑↑↑↑↑↑显示以上数据↑↑↑↑↑↑↑↑↑↑
      extp    #5Bh, #1
      mov   r15, 1306h      ;CH数值
      movb    rl6, #3         ;整数位数
      movb    rh6, #0         ;小数位数
;       mov   r4, #10         ;以10进制显示
      mov   r12, #63      ;X坐标(为简化计算,这里是最后一位数字的X坐标,而不是第一位数字的X坐标)
;       mov   r13, #44      ;Y坐标
      callr   DrawNumber      ;↑↑↑↑↑↑↑↑↑↑显示以上数据↑↑↑↑↑↑↑↑↑↑
      extp    #5Bh, #1
      mov   r15, 1308h      ;CI数值
      movb    rl6, #4         ;整数位数
      movb    rh6, #0         ;小数位数
      mov   r4, #16         ;以16进制显示
      mov   r12, #43      ;X坐标(为简化计算,这里是最后一位数字的X坐标,而不是第一位数字的X坐标)
;       mov   r13, #44      ;Y坐标
      callr   DrawNumber      ;↑↑↑↑↑↑↑↑↑↑显示以上数据↑↑↑↑↑↑↑↑↑↑
      extp    #5Bh, #1
      mov   r15, 130Ah      ;LAI数值
      movb    rl6, #4         ;整数位数
      movb    rh6, #0         ;小数位数
;       mov   r4, #16         ;以10进制显示
      mov   r12, #17      ;X坐标(为简化计算,这里是最后一位数字的X坐标,而不是第一位数字的X坐标)
;       mov   r13, #44      ;Y坐标
      callr   DrawNumber      ;↑↑↑↑↑↑↑↑↑↑显示以上数据↑↑↑↑↑↑↑↑↑↑
;       mov   r15,
;       mov   r14,
;       mov   r13,
;       mov   r12,
;       mov   r6,
loc_End:
      mov   r5,
      mov   r4,
loc_Org:
      add   r0, #12h      ;原断点语句
      rets
main endp

;显示一组数字,从个位向左逐个显示
DrawNumber proc near
      addb    rl6, rh6      ;总的数字位数
loc_Loop:
      mov   MDL, r15
      divu    r4
      mov   r14, MDH      ;模,即最后一位数字
      mov   r15, MDL      ;整,即前几位数字
      callr   DrawDigit
      sub   r12, #6         ;数字宽度
      subb    rh6, #1         ;小数位数-1
      jmpr    cc_NZ, loc_NotDot
      sub   r12, #2         ;小数点宽度
loc_NotDot:
      subb    rl6, #1         ;总的数字位数-1
      jmpr    cc_NZ, loc_Loop
      ret
DrawNumber endp

;显示一个数字图片
DrawDigit proc near
      mov   [-r0], r4
      mov   [-r0], r12
      mov   [-r0], r13
      mov   [-r0], r15
      add   r14, #116h      ;279-294号图片用来显示数字0-F
      calls   seg(DrawImageByIndex),sof(DrawImageByIndex)
      mov   r15,
      mov   r13,
      mov   r12,
      mov   r4,
      ret
DrawDigit endp
Patch EndS
END

页: [1]
查看完整版本: 【补丁源码】工模待机V1 - x618