kolibrios-gitea/programs/system/colrdial/palette.inc

130 lines
2.6 KiB
PHP
Raw Normal View History

;-----------------------------------------------------------------------------
align 4
create_palette:
;-------------------------------------------
mov eax,[palette_SIZE_Y]
mov ebx,6
xor edx,edx
div ebx
mov [part_of_size_y],eax
;-------------------------------------------
mov ebx,eax
mov eax,255 shl 24
xor edx,edx
div ebx
mov [offset_y],eax
;-------------------------------------------
mov edi,[palette_area]
mov edx,[offset_y]
;-------------------------------------------
xor ecx,ecx
mov eax,0xFF0000 ;there was [tone_area] which seems to be a bug
;-------------------------------------------
align 4
@@:
call palette_put_line
; blue
call next_color
add ecx,1
cmp ecx,[part_of_size_y]
jne @b
;-------------------------------------------
mov ecx,[part_of_size_y]
;-------------------------------------------
align 4
@@:
call palette_put_line
; red
ror eax,16
call next_color
rol eax,16
sub ecx,1
jne @b
;-------------------------------------------
xor ecx,ecx
;-------------------------------------------
align 4
@@:
call palette_put_line
; green
ror eax,8
call next_color
rol eax,8
add ecx,1
cmp ecx,[part_of_size_y]
jne @b
;-------------------------------------------
mov ecx,[part_of_size_y]
;-------------------------------------------
align 4
@@:
call palette_put_line
; blue
call next_color
sub ecx,1
jne @b
;-------------------------------------------
xor ecx,ecx
;-------------------------------------------
align 4
@@:
call palette_put_line
; red
ror eax,16
call next_color
rol eax,16
add ecx,1
cmp ecx,[part_of_size_y]
jne @b
;-------------------------------------------
mov ecx,[part_of_size_y]
;-------------------------------------------
align 4
@@:
call palette_put_line
; green
ror eax,8
call next_color
rol eax,8
sub ecx,1
jne @b
;-------------------------------------------
mov edx,[part_of_size_y]
lea edx,[edx*3]
shl edx,1
mov ecx,[palette_SIZE_Y]
sub ecx,edx
test ecx,ecx
jz .end
;-------------------------------------------
align 4
@@:
call palette_put_line
loop @b
;-------------------------------------------
align 4
.end:
ret
;---------------------------------------------------------------------
align 4
next_color:
mov ebx,ecx
imul ebx,edx
rol ebx,8
mov al,bl
ret
;---------------------------------------------------------------------
align 4
palette_put_line:
push ecx
mov ecx,[palette_SIZE_X]
cld
;-------------------------------------------
align 4
.loop:
stosd
dec edi
loop .loop
pop ecx
ret
;---------------------------------------------------------------------