- 积分
- 213
- 实力分
- 点
- 金钱数
- 两
- 技术分
- 分
- 贡献分
- 分
|

楼主 |
发表于 2005-10-11 09:31:15
|
显示全部楼层
以下是原作者的“收藏菜单”补丁原码:
#include sl45.inc
;#name FAV. (Programmable) Favourite Menu v2
#define eep_size 80h
#define eephdr_size 32
#define menu_num 12
'Firmware: sl45v56
'Author: rizapn
'Created: March 19, 2005
'Modified: March 28, 2005 (v2)
''
'Add Favorite menu ...
'This patch is assigning RightArrow key for Favorite Menu,这个用右方向键进入
'of course you can assign your own shortcut for this purposes.
'The entry-point for this patch is E474F0
''
'Favorite menu item is programmable through [Internet][Favorites]
'[URL] from the 1st entry.
''
'v2-> Favorite menu title is taken from [Int][Fav][Name]
''
'The menu item data format is:
'SSS.AAAAAA, where SSS is 3 digit string ID for menu item,
'and AAAAAA is 6 digit entry-point for that item.
'For example: 2d6.d8e1d6 for Currency Conv. function.
'Put a single space between each menu item data.
#ifdef BIN
org 20h:0
mov r4, #5098
#else
base 0a00000h
org 0db0366h
jmps fav_redir
fav_back:
org 0e474e0h
db '*** FAV v1.0 ***'
#endif
fav_main:
mov [-r0], r9
mov [-r0], r8
mov [-r0], r7
push DPP0
mov r9, r4
mov r4, #pof(strTable)
mov r5, #pag(strTable)
calls setExtSIDTable
mov r4, #eephdr_size
mov r13, #pof(fav_header)
mov r15, #2
callr _readEEP
mov r4, #eep_size
mov r13, #pof(eep_buff)
mov r15, #5Dh
callr _readEEP
mov r4, #2ah
mov [-r0], r4
mov r12, #pof(menu_struct)
mov r13, #pag(menu_struct)
mov r14, #pof(fav_MENU_STRUCT)
mov r15, #pag(fav_MENU_STRUCT)
calls memcpy
add r0, #2
mov DPP0, #pag(menu_buff)
mov r1, #pof(menu_buff)+18
mov r2, #pof(menu_hdl)+4
mov r3, #pof(eep_buff)
mov r13, #menu_num
fav_loop1:
movb rl4, [r3]
jmpr cc_Z, fav_endloop1
mov r5, #3
callr fav_getWord
mov r7, r12 ; r7 = string_ID (3 bytes)
add r3, #1
mov r5, #2
callr fav_getWord
mov r9, r12 ; r9 = segment (2 bytes)
mov r5, #4
callr fav_getWord
mov r8, r12 ; r8 = offset (4 bytes)
callr fav_push01
add r3, #1
add r2, #8
add r1, #36
sub r13, #1
jmpr cc_UGT, fav_loop1
fav_endloop1:
sub r13, #menu_num
neg r13
mov pof(menu_struct)+28h, r13
pop DPP0
mov r12, #0
mov r3, #8
loop20:
mov [-r0], r12
sub r3, #1
jmpr cc_NZ, loop20
mov r13, #pof(fav_MENU_HEADER)
mov r14, #pag(fav_MENU_HEADER)
mov [-r0], r14
mov [-r0], r13
mov r13, #pof(menu_struct)
mov r14, #pag(menu_struct)
mov [-r0], r14
mov [-r0], r13
mov r13, #0
mov r14, #0
calls createMenu02
add r0, #18h
mov r7, [r0+]
mov r8, [r0+]
mov r9, [r0+]
rets
_readEEP:
mov r12, #0
mov [-r0], r12
mov [-r0], r12
mov [-r0], r12
mov [-r0], r4
mov r12, r9
mov r14, #pag(eep_buff)
calls readEEP
add r0, #8
ret
fav_getWord:
mov r12, #0
gw01:
mov r4, #0
movb rl4, [r3+]
subb rl4, #'0'
jmpr cc_UGE, gb_001
movb rl4, #0
jmpr cc_UC, gb_ret
gb_001:
cmpb rl4, #9
jmpr cc_ULE, gb_ret
andb rl4, #0dfh
subb rl4, #7
gb_ret:
shl r12, #4
add r12, r4
sub r5, #1
jmpr cc_NZ, gw01
ret
fav_push01:
mov r4, #053ah
mov [-r1], r4
mov r4, #3h
mov [-r1], r4
mov r4, #2ebh
mov [-r1], r4
mov r4, #3c06h
mov [-r1], r4
mov r4, #0
mov [-r1], r4
mov [-r1], r7
mov [-r1], r7
mov [-r1], r4
mov [-r1], r4
mov [-r2], r9
mov [-r2], r8
ret
fav_MENU_HEADER:
dw 0,0,65h,0ch
dw 0a32h, 2e3h ; menu_icon (02E3:0A32)
dw 0e27h, 7fffh ; patch it to "Notes..."
dw 0,0
fav_MENU_STRUCT:
dw 0,0,0,0,0,0,0,0 ; handler_info
dw 3c02h,2ebh,3bfch,2ebh,0,0 ; always like this?
dw 0,0 ; handler_info
dw pof(menu_buff), pag(menu_buff) ; menu_items_addr
dw pof(menu_hdl), pag(menu_hdl) ; menu_handler_addr
dw menu_num ; number_of_menu_item
strTable:
dw pof(fav_header), pag(fav_header)
fav_redir:
jmpr cc_Z, fav_ok
jmps fav_back
fav_ok:
mov r4, #5098
calls fav_main
jmps 0db071ch
org 29h:800h
fav_header:
var eephdr_size
eep_buff:
var eep_size
menu_buff:
var 18*menu_num
menu_hdl:
var 4*menu_num
menu_struct:
var 42
[ 本帖最后由 Xinshou 于 2005-10-11 11:14 编辑 ] |
|