dnn1 Начинающий телефонист В миру: Дмитрий Откуда: Russia, Пермь С нами с: 26.04.2004 Плодовитость: 32
Рейтинг
Подано 13 (8/5) голосов
|
FAQ начинающего прошивкокопателя.
|
s55v20. Изучаю работу с файлами.
Делаю следующий код:
[code]
$SEGMENTED
$MOD167
$INCLUDE (REG167.INC)
$INCLUDE (Macros.inc)
NAME test
PlaySound equ 0A4AD0Ch ;
gbs_OpenFile equ 0D2ADECh ; 0D2A986h ;
gbs_ReadFile equ 0D2AE88h ; 0D2A9F2h ;
gbs_WriteFile equ 0D2AF92h ; 0D2AAA6h ;
gbs_SeekFile equ 0D2AF42h ; 0D2AA6Ch ;
gbs_CloseFile equ 0D2AFD4h ; 0D2AAD0h ;
PATCH_ADDRESS EQU 07BA000h ; Patch code place
v_Handle equ 0c140h ;
v_var1 equ 0c142h ;
v_Buffer equ 00C150h ; buffer
MyFunc SECTION CODE WORD AT PATCH_ADDRESS
patch_proc_my PROC FAR
patch_start:
mov [-r0],r12
mov [-r0],r13
mov [-r0],r14
mov [-r0],r15
sub r0,#10h
; mov r15, #0
; mov [-r0],r15
; mov [-r0],r15
; mov [-r0],r15
; mov [-r0],r15
; mov [-r0],r15
; mov [-r0],r15
; mov [-r0],r15
; mov [-r0],r15
mov r14, r0
mov r15, DPP1
and r14, #3FFFh
mov [-r0], r15
mov [-r0], r14
add r14, #8
mov [-r0], r15
mov [-r0], r14
;
mov r12, #pof(filename)
mov r13, #pag(filename)
; mov r14, #08002h
mov r14, #101h
mov r15, #0180h ;
calls seg(gbs_OpenFile), sof(gbs_OpenFile)
; mov r4,#0AAAAh
cmp r4,#0FFFFh
jmpr cc_NZ, loc_FileIsOpened
; file error
add r0,#8
mov r12,#0ADDEh
extp #pag(v_var1),#1
mov pof(v_var1),r12
jmpr cc_UC, loc_RETS
loc_FileIsOpened:
extp #pag(v_Handle),#1
mov pof(v_Handle),r4
mov r13,#0EEEEh
extp #pag(v_var1),#1
mov pof(v_var1),r13
extp #pag(v_Handle),#1
mov r12,pof(v_Handle)
add r0,#4
mov r13,[r0+]
mov r14,[r0+]
% calls (gbs_CloseFile)
mov r12,#5 ;1 mid
% calls (PlaySound)
;finish
loc_RETS:
add r0,#10h
mov r15,[r0+]
mov r14,[r0+]
mov r13,[r0+]
mov r12,[r0+]
rets
nop
nop
nop
nop
patch_proc_my ENDP
filename db "a:\tests.txt", 0, 0
MyFunc ENDS
END
[/code]
Сначала хотел читать файл, не получилось. Уменьшил код до вышеуказанного, что есть почти калька с кода патча "Лог звонков".
Итог: Запускаю из сименс дебагера - получаю выключение телефона. Запускаю по клавише из основного экрана телефона, получаю временное посинение экрана и после секунд 2-3 "Поиск сети" и т.д. Но состояние какое-то странное.
Вопрос. Что неправильно в коде или его размещении в памяти или еще что?? Пробовал вместо вызова open_file / close_file делать вызов playsound - все ок, пиликает. Т.к. никто не говорит, что за флажки передаются через стек и чем их заполнять (в прошивке есть просто зануление), пробовал чистить стек (ряд "mov [-r0],#0"). Результат тот же.
Как эти gbs_file_XXX работают то? |
____________________________
Сборник моих патчей для M55v91 - http://d-n-n.narod.ru обновлено 13.11.2005 |
|