kolibrios-fun/programs/system/colrdial/tone.inc

112 lines
1.9 KiB
PHP
Raw Normal View History

;-----------------------------------------------------------------------------
align 4
create_tone:
;-------------------------------------------
mov ebx,[tone_SIZE_Y]
xor eax,eax
dec al
sub al,[tone_color.red]
shl eax,24
xor edx,edx
div ebx
mov [offset_y.red],eax
xor eax,eax
dec al
sub al,[tone_color.green]
shl eax,24
xor edx,edx
div ebx
mov [offset_y.green],eax
xor eax,eax
dec al
sub al,[tone_color.blue]
shl eax,24
xor edx,edx
div ebx
mov [offset_y.blue],eax
;-------------------------------------------
mov edi,[tone_area]
xor ecx,ecx
;-------------------------------------------
align 4
@@:
mov eax,[tone_color]
; blue
mov edx,[offset_y.blue]
call next_color_Y
ror eax,8
; green
mov edx,[offset_y.green]
call next_color_Y
ror eax,8
; red
mov edx,[offset_y.red]
call next_color_Y
rol eax,16
call tone_put_line
add ecx,1
cmp ecx,[tone_SIZE_X]
jne @b
ret
;-----------------------------------------------------------------------------
tone_put_line:
push ecx
mov ecx,eax
mov ebx,[tone_SIZE_X]
shl eax,24
xor edx,edx
div ebx
mov [offset_x.blue],eax
mov eax,ecx
shr eax,8
shl eax,24
xor edx,edx
div ebx
mov [offset_x.green],eax
mov eax,ecx
shr eax,16
shl eax,24
xor edx,edx
div ebx
mov [offset_x.red],eax
mov eax,ecx
push ebx esi
mov ecx,[tone_SIZE_X]
xor edx,edx
xor ebx,ebx
xor esi,esi
@@:
mov eax,edx
shr eax,24
add edx,[offset_x.blue]
mov [edi],al
mov eax,ebx
shr eax,24
add ebx,[offset_x.green]
mov [edi+1],al
mov eax,esi
shr eax,24
add esi,[offset_x.red]
mov [edi+2],al
add edi,3
dec ecx
jnz @b
pop esi ebx
pop ecx
ret
;-----------------------------------------------------------------------------
align 4
next_color_Y:
imul edx,ecx
rol edx,8
add al,dl
ret
;-----------------------------------------------------------------------------