Всё! Блок прокрутки данных работает!
Всё! Блок прокрутки данных работает!
Теперь только алгоритм...
mov eax, [(t SoundBufInfo ebx).position]
cmp eax, [(t SoundBufInfo ebx).present]
jnc @@load_all_start
mov eax, [(t SoundBufInfo ebx).present]
or eax, eax
jz @@load_all_start ; первый запуск
sub eax, [(t SoundBufInfo ebx).position]
jz @@load_all_start ;!!
mov [(t SoundBufInfo ebx).present], eax ; = данные сдвигать и они будут в
; начале
;--- сдвигаю остаточные данные в начало
mov esi, edi
add esi, [(t SoundBufInfo ebx).position]
test al, 11b
jnz @@m6_0
shr eax, 2
xchg ecx, eax
rep movsd
jmp @@m6_1
@@m6_0:
xchg ecx, eax
rep movsb
@@m6_1:
;---
mov eax, [(t SoundBufInfo ebx).present]
sub [@@Len], eax ; загружать остаток
jmp @@load_all_start_0
@@load_all_start:
sub eax, eax
mov [(t SoundBufInfo ebx).present], eax
@@load_all_start_0:
sub eax, eax
mov [(t SoundBufInfo ebx).position], eax
@@load_all:
mov edi, [(t SoundBufInfo ebx).mem]
add edi, [(t SoundBufInfo ebx).position]
add edi, [(t SoundBufInfo ebx).present]
pusha
Call BASS_ChannelGetPosition, [@@hStream]
Call _wsprintfA C,ofs b0,ofs szb0, edx, eax
Call SetDlgItemText, [hdlgMain], ide_Main_NumberOfHills, ofs b0
popa
Call BASS_ChannelGetData, [@@hStream], edi, [@@Len]
cmp eax, -1
jz @@exitErr
;---
add eax, [(t SoundBufInfo ebx).present]
mov [(t SoundBufInfo ebx).present], eax
Теперь только алгоритм...
mov eax, [(t SoundBufInfo ebx).position]
cmp eax, [(t SoundBufInfo ebx).present]
jnc @@load_all_start
mov eax, [(t SoundBufInfo ebx).present]
or eax, eax
jz @@load_all_start ; первый запуск
sub eax, [(t SoundBufInfo ebx).position]
jz @@load_all_start ;!!
mov [(t SoundBufInfo ebx).present], eax ; = данные сдвигать и они будут в
; начале
;--- сдвигаю остаточные данные в начало
mov esi, edi
add esi, [(t SoundBufInfo ebx).position]
test al, 11b
jnz @@m6_0
shr eax, 2
xchg ecx, eax
rep movsd
jmp @@m6_1
@@m6_0:
xchg ecx, eax
rep movsb
@@m6_1:
;---
mov eax, [(t SoundBufInfo ebx).present]
sub [@@Len], eax ; загружать остаток
jmp @@load_all_start_0
@@load_all_start:
sub eax, eax
mov [(t SoundBufInfo ebx).present], eax
@@load_all_start_0:
sub eax, eax
mov [(t SoundBufInfo ebx).position], eax
@@load_all:
mov edi, [(t SoundBufInfo ebx).mem]
add edi, [(t SoundBufInfo ebx).position]
add edi, [(t SoundBufInfo ebx).present]
pusha
Call BASS_ChannelGetPosition, [@@hStream]
Call _wsprintfA C,ofs b0,ofs szb0, edx, eax
Call SetDlgItemText, [hdlgMain], ide_Main_NumberOfHills, ofs b0
popa
Call BASS_ChannelGetData, [@@hStream], edi, [@@Len]
cmp eax, -1
jz @@exitErr
;---
add eax, [(t SoundBufInfo ebx).present]
mov [(t SoundBufInfo ebx).present], eax
Comments (4):