forked from KolibriOS/kolibrios
upload FillScr application
git-svn-id: svn://kolibrios.org@6961 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
parent
e235585e96
commit
df342c2f91
2
programs/media/FillScr/Tupfile.lua
Normal file
2
programs/media/FillScr/Tupfile.lua
Normal file
@ -0,0 +1,2 @@
|
||||
if tup.getconfig("NO_NASM") ~= "" then return end
|
||||
tup.rule("fillscr.asm", "nasm -f bin -o %o %f " .. tup.getconfig("KPACK_CMD"), "fillscr")
|
156
programs/media/FillScr/fillScr.asm
Normal file
156
programs/media/FillScr/fillScr.asm
Normal file
@ -0,0 +1,156 @@
|
||||
; to compile: nasm -f bin fillscr.asm -o fillscr ;
|
||||
; to generate random colors use "fillscr rnd" ;
|
||||
; otherwise use "filscr r,g,b, r,g,b, r,g,b,..." ;
|
||||
ORG 0
|
||||
BITS 32
|
||||
; ---------------------------- ;
|
||||
points equ END
|
||||
POINTS_SIZE equ 108
|
||||
PARAMS_SIZE equ 256
|
||||
; ---------------------------- ;
|
||||
MENUET01 db 'MENUET01'
|
||||
version dd 1
|
||||
program.start dd START
|
||||
program.end dd END
|
||||
program.memory dd END + POINTS_SIZE + PARAMS_SIZE
|
||||
program.stack dd 0
|
||||
program.params dd END + POINTS_SIZE
|
||||
program.path dd 0
|
||||
; ---------------------------- ;
|
||||
points_count dd 0
|
||||
rnd dd 0
|
||||
; ---------------------------- ;
|
||||
START:
|
||||
mov edi, points
|
||||
mov esi, [program.params]
|
||||
cmp [esi], dword "rnd"
|
||||
jne .not_rnd
|
||||
mov [points_count], dword POINTS_SIZE / 3
|
||||
mov ecx, POINTS_SIZE / 2
|
||||
.next_rnd:
|
||||
rdtsc
|
||||
xor eax, edx
|
||||
xor [rnd], eax
|
||||
imul eax, [rnd], 134775813
|
||||
add eax, 2531011
|
||||
mov [rnd], eax
|
||||
shr eax, 16
|
||||
mov [edi], ax
|
||||
inc edi
|
||||
inc edi
|
||||
loop .next_rnd
|
||||
jmp .exit
|
||||
.not_rnd:
|
||||
xor ebp, ebp
|
||||
.next:
|
||||
.skip_spaces:
|
||||
cmp [esi], byte " "
|
||||
jne .spaces_skipped
|
||||
inc esi
|
||||
jmp .skip_spaces
|
||||
.spaces_skipped:
|
||||
; cmp [esi], byte 0
|
||||
; je .exit
|
||||
mov eax, esi
|
||||
.find_end_or_comma:
|
||||
cmp [esi], byte ","
|
||||
je .end_or_comma_found
|
||||
cmp [esi], byte 0
|
||||
je .end_or_comma_found
|
||||
inc esi
|
||||
jmp .find_end_or_comma
|
||||
.end_or_comma_found:
|
||||
; in eax start of number
|
||||
; in esi pointer to comma or end after number
|
||||
mov ecx, esi
|
||||
sub ecx, eax
|
||||
xor ebx, ebx
|
||||
cmp cl, 1
|
||||
jne .cmp2
|
||||
xor cl, cl
|
||||
jmp .1
|
||||
.cmp2:
|
||||
cmp cl, 2
|
||||
jne .cmp3
|
||||
xor cl, cl
|
||||
jmp .2
|
||||
.cmp3:
|
||||
cmp cl, 3
|
||||
jne .exit
|
||||
xor cl, cl
|
||||
.3:
|
||||
movzx edx, byte[eax + ecx]
|
||||
sub dl, 48
|
||||
shl dl, 2
|
||||
lea edx, [edx * 4 + edx]
|
||||
lea edx, [edx * 4 + edx]
|
||||
add bl, dl
|
||||
inc ecx
|
||||
.2:
|
||||
movzx edx, byte[eax + ecx]
|
||||
sub dl, 48
|
||||
shl dl, 1
|
||||
lea edx, [edx * 4 + edx]
|
||||
add bl, dl
|
||||
inc ecx
|
||||
.1:
|
||||
movzx edx, byte[eax + ecx]
|
||||
sub dl, 48
|
||||
add bl, dl
|
||||
test ebp, ebp
|
||||
jnz .cmp_next
|
||||
mov [edi + 2], bl
|
||||
jmp .putted
|
||||
.cmp_next:
|
||||
cmp ebp, 2
|
||||
jne .cmp_next1
|
||||
mov [edi - 2], bl
|
||||
jmp .putted
|
||||
.cmp_next1:
|
||||
mov [edi], bl
|
||||
.putted:
|
||||
inc ebp
|
||||
cmp ebp, 3
|
||||
jne .not_3
|
||||
xor ebp, ebp
|
||||
inc dword[points_count]
|
||||
.not_3:
|
||||
inc edi
|
||||
inc esi
|
||||
jmp .next
|
||||
.exit:
|
||||
; width = height = sqrt(points_count)
|
||||
mov eax, [points_count]
|
||||
or edx, -1
|
||||
@@:
|
||||
add edx, 2
|
||||
sub eax, edx
|
||||
jnle @@
|
||||
sbb edx, -1
|
||||
shr edx, 1
|
||||
; set width, height
|
||||
mov eax, 15
|
||||
mov ebx, 1
|
||||
mov ecx, edx
|
||||
int 64
|
||||
; set "stretch"
|
||||
; mov eax, 15
|
||||
mov ebx, 4
|
||||
mov ecx, 2
|
||||
int 64
|
||||
; put pixels
|
||||
; mov eax, 15
|
||||
mov ebx, 5
|
||||
mov ecx, points ; BBGGRRBBGGRR...
|
||||
xor edx, edx
|
||||
mov esi, [points_count] ; size of data = count * 3
|
||||
lea esi, [esi * 2 + esi]
|
||||
int 64
|
||||
; refresh screen
|
||||
; mov eax, 15
|
||||
mov ebx, 3
|
||||
int 64
|
||||
; thread terminate
|
||||
mov eax, -1
|
||||
int 64
|
||||
END:
|
2
programs/media/FillScr/make.bat
Normal file
2
programs/media/FillScr/make.bat
Normal file
@ -0,0 +1,2 @@
|
||||
nasm -f bin fillscr.asm -o fillscr
|
||||
pause
|
Loading…
Reference in New Issue
Block a user