Compare commits
10 Commits
9fba11f18c
...
be5679567d
Author | SHA1 | Date | |
---|---|---|---|
be5679567d | |||
|
78de535233 | ||
e353771faa | |||
714cc0a65c | |||
9357a21169 | |||
75e732a437 | |||
afd07534ab | |||
20aba254bc | |||
fbd99c82a4 | |||
784b02b4a4 |
@@ -456,9 +456,9 @@ tup.append_table(img_files, {
|
||||
{"DEMOS/BCDCLK", VAR_PROGS .. "/demos/bcdclk/trunk/bcdclk"},
|
||||
{"DEMOS/BUDHBROT", VAR_PROGS .. "/demos/buddhabrot/trunk/buddhabrot"},
|
||||
{"DEMOS/EYES", VAR_PROGS .. "/demos/eyes/trunk/eyes"},
|
||||
{"DEMOS/FIREWORK", VAR_PROGS .. "/demos/firework/trunk/firework"},
|
||||
{"DEMOS/FIREWORK", VAR_PROGS .. "/demos/firework/firework"},
|
||||
{"DEMOS/MOVBACK", VAR_PROGS .. "/demos/movback/trunk/movback"},
|
||||
{"DEMOS/PLASMA", VAR_PROGS .. "/demos/plasma/trunk/plasma"},
|
||||
{"DEMOS/PLASMA", VAR_PROGS .. "/demos/plasma/plasma"},
|
||||
{"DEMOS/SPIRAL", VAR_PROGS .. "/demos/spiral/spiral"},
|
||||
{"DEMOS/TINYFRAC", VAR_PROGS .. "/demos/tinyfrac/trunk/tinyfrac"},
|
||||
{"DEMOS/TRANTEST", VAR_PROGS .. "/demos/trantest/trunk/trantest"},
|
||||
@@ -474,6 +474,7 @@ tup.append_table(img_files, {
|
||||
{"DEVELOP/ENTROPYV", VAR_PROGS .. "/develop/entropyview/entropyview"},
|
||||
{"DEVELOP/FASM", VAR_PROGS .. "/develop/fasm/1.73/fasm"},
|
||||
{"DEVELOP/GENFILES", VAR_PROGS .. "/testing/genfiles/GenFiles"},
|
||||
{"DEVELOP/PIPET", VAR_PROGS .. "/other/pipet/pipet"},
|
||||
{"DEVELOP/H2D2B", VAR_PROGS .. "/develop/h2d2b/trunk/h2d2b"},
|
||||
{"DEVELOP/HEED", VAR_PROGS .. "/develop/heed/trunk/heed"},
|
||||
{"DEVELOP/MTDBG", VAR_PROGS .. "/develop/mtdbg/mtdbg"},
|
||||
@@ -669,7 +670,6 @@ tup.append_table(img_files, {
|
||||
{"TMPDISK", VAR_PROGS .. "/cmm/tmpdisk/tmpdisk.com"},
|
||||
{"DEVELOP/CLIPVIEW", VAR_PROGS .. "/cmm/clipview/clipview.com"},
|
||||
{"DEVELOP/MENU", VAR_PROGS .. "/cmm/menu/menu.com"},
|
||||
{"DEVELOP/PIPET", VAR_PROGS .. "/cmm/misc/pipet.com"},
|
||||
{"File Managers/EOLITE", VAR_PROGS .. "/cmm/eolite/Eolite.com"},
|
||||
{"File Managers/KFM2", VAR_PROGS .. "/cmm/misc/kfm2.com"},
|
||||
{"DEVELOP/DIFF", VAR_PROGS .. "/cmm/diff/diff.com"},
|
||||
|
@@ -273,7 +273,7 @@ void draw_list()
|
||||
}
|
||||
|
||||
init = false;
|
||||
if (selected) WriteText(5, selected-1*ITEM_H + menu1.y + menu1.text_y, TEXT_FONT_TYPE, 0xEE0000, "\x10"); // ?
|
||||
if (selected) WriteText(5, selected-1*ITEM_H + menu1.y + menu1.text_y +3, 0x80, 0xEE0000, "\x10"); // ?
|
||||
}
|
||||
|
||||
void click()
|
||||
|
@@ -23,11 +23,8 @@ MAX_TRIANGLES equ 12
|
||||
SCREEN_X equ 320
|
||||
SCREEN_Y equ 200
|
||||
|
||||
include 'lang.inc'
|
||||
include '..\..\..\macros.inc'
|
||||
;purge mov
|
||||
include 'ascl.inc'
|
||||
include 'ascgl.inc'
|
||||
|
||||
START:
|
||||
init_sin_cos:
|
||||
@@ -65,7 +62,47 @@ still:
|
||||
; cmp eax,3 ; button in buffer ?
|
||||
jz button
|
||||
|
||||
fps 220,8,cl_White,cl_Black
|
||||
|
||||
; FPS - Set Frame Per Second Display
|
||||
fps_show_frequency=40
|
||||
macro fps x,y,color,delcolor
|
||||
{
|
||||
local spdat,savetime,new_time,fps,fps_cntr,out_fps,new_time,ttt
|
||||
local no_out_fps
|
||||
jmp spdat
|
||||
savetime dd 0
|
||||
fps_cntr dd 0
|
||||
fps dd 0
|
||||
ttt dd 0
|
||||
spdat:
|
||||
get_time:
|
||||
mov eax,3
|
||||
mcall
|
||||
cmp eax,[savetime]
|
||||
jne new_time
|
||||
inc [fps_cntr]
|
||||
cmp dword [ttt],0
|
||||
je out_fps
|
||||
dec dword [ttt]
|
||||
jmp no_out_fps
|
||||
new_time:
|
||||
mov [savetime],eax
|
||||
mov ebx,[fps_cntr]
|
||||
mov [fps],ebx
|
||||
mov [fps_cntr],0
|
||||
out_fps:
|
||||
mov dword [ttt],fps_show_frequency
|
||||
mov eax,47
|
||||
mov ebx,5*65536
|
||||
mov edx,(x+1)*65536+y
|
||||
mov esi,color+0xD0000000
|
||||
mov edi,delcolor
|
||||
mov ecx,[fps]
|
||||
mcall
|
||||
no_out_fps:
|
||||
}
|
||||
|
||||
fps 220,5,0x00FFFfff,0x00000000
|
||||
|
||||
main_loop:
|
||||
|
||||
@@ -112,15 +149,15 @@ exit:
|
||||
draw_window:
|
||||
mcall 12, 1 ;Start window redraw
|
||||
|
||||
mcall 48, 4
|
||||
mcall 48, 4
|
||||
|
||||
lea ecx, [100*65536+SCREEN_Y+4+eax]; [y start] *65536 + [y size] + [skin_height]
|
||||
xor eax, eax ;Draw window
|
||||
lea ecx,[100*65536+SCREEN_Y+4+eax]; [y start] *65536 + [y size] + [skin_height]
|
||||
xor eax,eax ;Draw window
|
||||
mov ebx,100*65536+(SCREEN_X+9) ;x start*65536+x size
|
||||
mov edx,0x54000000 ;0x03 use skinned window
|
||||
mov edi,title
|
||||
mcall
|
||||
|
||||
|
||||
mcall 12, 2 ;End window redraw
|
||||
|
||||
ret
|
||||
@@ -196,7 +233,7 @@ clear_screen_buffer:
|
||||
rep stosd
|
||||
|
||||
ret
|
||||
|
||||
|
||||
;include triangle.asm
|
||||
; Mikolaj Felix 14/5/2001
|
||||
; mfelix@polbox.com
|
||||
|
@@ -3,5 +3,4 @@ HELPERDIR = (tup.getconfig("HELPERDIR") == "") and "../../.." or tup.getconfig("
|
||||
tup.include(HELPERDIR .. "/use_fasm.lua")
|
||||
add_include(tup.getvariantdir())
|
||||
|
||||
tup.rule("echo lang fix " .. ((tup.getconfig("LANG") == "") and "en_US" or tup.getconfig("LANG")) .. " > %o", {"lang.inc"})
|
||||
tup.rule({"3DCUBE2.ASM", extra_inputs = {"lang.inc"}}, FASM .. " %f %o " .. tup.getconfig("KPACK_CMD"), "3DCUBE2")
|
||||
tup.rule({"3DCUBE2.ASM"}, "fasm %f %o " .. tup.getconfig("KPACK_CMD"), "3DCUBE2")
|
||||
|
@@ -1,624 +0,0 @@
|
||||
lang equ ru_RU
|
||||
|
||||
;
|
||||
; Assembler
|
||||
; SMALL
|
||||
; CODE
|
||||
; Graphics
|
||||
; Libary
|
||||
;
|
||||
; Ver 0.10 By Pavlushin Evgeni (RUSSIA)
|
||||
; www.waptap@mail.ru
|
||||
|
||||
;InfoList
|
||||
;0.01 LoadImage
|
||||
;0.02 SetBmp
|
||||
;0.03 Bmptoimg, Setimg ~01.03.2004
|
||||
;0.04 Bug deleted, copyimg ~03.05.2004
|
||||
;0.05 fullimg, collimg ~05.05.2004
|
||||
;0.06 getimg ~09.05.2004
|
||||
;0.07 convbmp ~13.05.2004
|
||||
;0.08 fps ~14.05.2004
|
||||
;0.09 drawfbox ~03.06.2004
|
||||
;0.10 all macros optimized by halyavin, add at ~07.06.2004
|
||||
|
||||
;DrawBox
|
||||
macro drawfbox x,y,xs,ys,color
|
||||
{
|
||||
mov ecx,y
|
||||
mov ebx,x
|
||||
shl ebx,16
|
||||
add ebx,xs
|
||||
shl ecx,16
|
||||
add ecx,ys
|
||||
mov edx,color
|
||||
mov eax,13
|
||||
mcall
|
||||
}
|
||||
|
||||
; FPS - Set Frame Per Second Display
|
||||
fps_show_frequency=40
|
||||
macro fps x,y,color,delcolor
|
||||
{
|
||||
local spdat,savetime,new_time,fps,fps_cntr,out_fps,new_time,ttt
|
||||
local no_out_fps
|
||||
jmp spdat
|
||||
savetime dd 0
|
||||
fps_cntr dd 0
|
||||
fps dd 0
|
||||
ttt dd 0
|
||||
spdat:
|
||||
get_time:
|
||||
mov eax,3
|
||||
mcall
|
||||
cmp eax,[savetime]
|
||||
jne new_time
|
||||
inc [fps_cntr]
|
||||
cmp dword [ttt],0
|
||||
je out_fps
|
||||
dec dword [ttt]
|
||||
jmp no_out_fps
|
||||
new_time:
|
||||
mov [savetime],eax
|
||||
mov ebx,[fps_cntr]
|
||||
mov [fps],ebx
|
||||
mov [fps_cntr],0
|
||||
out_fps:
|
||||
if ~(delcolor eq )
|
||||
mov ebx,x*65536+30
|
||||
mov ecx,y*65536+7
|
||||
mov edx,delcolor
|
||||
mov eax,13
|
||||
mcall
|
||||
end if
|
||||
mov dword [ttt],fps_show_frequency
|
||||
mov eax,47
|
||||
mov ebx,5*65536
|
||||
; mov bl,0
|
||||
mov edx,x*65536+y
|
||||
mov esi,color
|
||||
mov ecx,[fps]
|
||||
mcall
|
||||
no_out_fps:
|
||||
}
|
||||
|
||||
|
||||
|
||||
; COLLIMG - Collusion image's
|
||||
_ldbounce_count=0;
|
||||
macro collimg img1_off,x1,y1,img2_off,x2,y2,otv
|
||||
{
|
||||
local bounce,exit,_1dbounce,anot,bc,nbc
|
||||
mov esi,[img1_off] ;xs1
|
||||
mov edi,[img2_off] ;ys2
|
||||
mov eax,x1 ;
|
||||
mov ebx,x2 ;
|
||||
call _1dbounce
|
||||
mov edx,ecx
|
||||
mov esi,[img1_off+4] ;ys1
|
||||
mov edi,[img2_off+4] ;ys2
|
||||
mov eax,y1 ;
|
||||
mov ebx,y2 ;
|
||||
call _1dbounce
|
||||
add edx,ecx
|
||||
cmp edx,2
|
||||
je bounce
|
||||
mov otv,0
|
||||
jmp exit
|
||||
_ldbounce_count=_ldbounce_count+1
|
||||
if (_ldbounce_count = 1)
|
||||
_1dbounce:
|
||||
cmp ebx,eax
|
||||
jnae anot
|
||||
add eax,esi
|
||||
cmp eax,ebx
|
||||
jna nbc
|
||||
jmp bc
|
||||
anot:
|
||||
add ebx,edi
|
||||
cmp ebx,eax
|
||||
jna nbc
|
||||
bc:
|
||||
mov ecx,1
|
||||
ret
|
||||
nbc:
|
||||
mov ecx,0
|
||||
ret
|
||||
end if
|
||||
bounce:
|
||||
mov otv,1
|
||||
exit:
|
||||
}
|
||||
|
||||
; SETBMP - Set bmp to window
|
||||
; (SYNTAX) SETBMP dd xstart ,dd ystart ,BMP_offset,dd soi
|
||||
; (SAMPLE) SETBMP dword [xt],dword [yt],I_END,dword [tsoi]
|
||||
; SETBMP 15,10,I_END,dword [tsoi]
|
||||
; ( NOTE ) SOI - Start of image
|
||||
|
||||
macro setbmp arg1,arg2,arg3,arg4
|
||||
{
|
||||
local nodi
|
||||
cmp word [arg3],word 'BM'
|
||||
jne nodi
|
||||
mov eax,7
|
||||
mov ebx,arg4 ;[soi]
|
||||
mov ecx,dword [arg3+18]
|
||||
shl ecx,16
|
||||
add ecx,dword [arg3+22]
|
||||
if (arg1 eqtype 0) & (arg2 eqtype 0)
|
||||
mov edx,arg1*65536+arg2
|
||||
else
|
||||
mov edx,arg1
|
||||
shl edx,16
|
||||
add edx,arg2
|
||||
end if
|
||||
mcall
|
||||
nodi:
|
||||
}
|
||||
|
||||
macro setimg arg1,arg2,arg3
|
||||
{
|
||||
local nodi
|
||||
mov eax,7
|
||||
mov ebx,arg3
|
||||
add ebx,8
|
||||
mov ecx,dword [arg3]
|
||||
shl ecx,16
|
||||
add ecx,dword [arg3+4]
|
||||
if (arg1 eqtype 0) & (arg2 eqtype 0)
|
||||
mov edx,arg1*65536+arg2
|
||||
else
|
||||
mov edx,arg1
|
||||
shl edx,16
|
||||
add edx,arg2
|
||||
end if
|
||||
mcall
|
||||
}
|
||||
|
||||
;Not optimiz
|
||||
macro getimg imgsrc,x,y,xs,ys,imgdest
|
||||
{
|
||||
local cyc
|
||||
mov eax,xs
|
||||
mov dword [imgdest],eax
|
||||
mov eax,ys
|
||||
mov dword [imgdest+4],eax
|
||||
|
||||
mov eax,dword [imgsrc] ;getx size
|
||||
mov edi,eax
|
||||
mov ebx,y
|
||||
mul ebx
|
||||
add eax,x
|
||||
mov ebx,3
|
||||
mul ebx ;eax=offset on imsrc
|
||||
|
||||
mov ecx,0
|
||||
mov ebx,0
|
||||
mov ebp,eax
|
||||
mov esi,0
|
||||
|
||||
add esi,8
|
||||
add ebp,8
|
||||
|
||||
cyc:
|
||||
mov al,byte [imgsrc+ebp]
|
||||
mov [imgdest+esi],al
|
||||
mov al,byte [imgsrc+ebp+1]
|
||||
mov [imgdest+esi+1],al
|
||||
mov al,byte [imgsrc+ebp+2]
|
||||
mov [imgdest+esi+2],al
|
||||
add esi,3
|
||||
add ebp,3
|
||||
inc ecx
|
||||
cmp ecx,xs
|
||||
jne cyc
|
||||
add ebp,edi
|
||||
add ebp,edi
|
||||
add ebp,edi
|
||||
sub ebp,xs
|
||||
sub ebp,xs
|
||||
sub ebp,xs
|
||||
mov ecx,0
|
||||
inc ebx
|
||||
cmp ebx,ys
|
||||
jne cyc
|
||||
|
||||
}
|
||||
|
||||
;
|
||||
macro bmptoimg bmp_off,soi,img_off
|
||||
{
|
||||
local nodix,conv
|
||||
cmp word [bmp_off],word 'BM'
|
||||
jne nodix
|
||||
mov eax,dword [bmp_off+18]
|
||||
mov ebx,dword [bmp_off+22]
|
||||
mov dword [img_off],eax
|
||||
mov dword [img_off+4],ebx
|
||||
mul ebx
|
||||
lea ecx,[eax+2*eax]
|
||||
lea edi,[img_off+8]
|
||||
mov esi,dword [soi]
|
||||
cld
|
||||
rep movsb
|
||||
nodix:
|
||||
}
|
||||
|
||||
macro copyimg img2_off,img1_off
|
||||
{
|
||||
local cop
|
||||
mov eax,dword [img1_off]
|
||||
mov ebx,dword [img1_off+4]
|
||||
mul ebx
|
||||
lea ecx,[eax+2*eax]
|
||||
lea esi,[img1_off+8]
|
||||
lea edi,[img2_off+8]
|
||||
cld
|
||||
rep movsb
|
||||
}
|
||||
|
||||
macro fullimg img_off,xs,ys,color
|
||||
{
|
||||
local cop
|
||||
mov eax,xs
|
||||
mov ebx,ys
|
||||
mov dword [img_off],eax
|
||||
mov dword [img_off+4],ebx
|
||||
mul ebx
|
||||
lea ebp,[eax+2*eax]
|
||||
mov esi,color
|
||||
if color eqtype 0
|
||||
mov ecx,color/65536
|
||||
else
|
||||
mov ecx,esi
|
||||
shr ecx,16
|
||||
end if
|
||||
xor edi,edi
|
||||
cop:
|
||||
mov word [img_off+8+edi],si
|
||||
add edi,2
|
||||
mov byte [img_off+8+edi],cl
|
||||
inc edi
|
||||
cmp edi,ebp
|
||||
jne cop
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
macro convbmp bmp_load_area,bmp_soi
|
||||
{
|
||||
local status,bps,dwps,soi,sop,eop,eos,process,fileinfo,string,end_bmp
|
||||
local converttable,noaddelem,nextbit,convert1bpp,convert4bpp,convert2
|
||||
local nextelem,convertno32,nomorestring,convert1,nextstring,yespicsize
|
||||
local noaddword
|
||||
;local qwe,bmpfn
|
||||
|
||||
; convert:
|
||||
movzx eax,word [bmp_load_area+28]
|
||||
mul dword [bmp_load_area+18]
|
||||
mov ebx,32
|
||||
div ebx
|
||||
test edx,edx
|
||||
je noaddword
|
||||
inc eax
|
||||
noaddword:
|
||||
mov dword [dwps],eax ;dwps-doublewords per string
|
||||
shl eax,2
|
||||
mov dword [bps],eax ;bps-bytes per string
|
||||
|
||||
cmp dword [bmp_load_area+34],0
|
||||
jne yespicsize ;if picture size is defined
|
||||
mul dword [bmp_load_area+22]
|
||||
mov dword [bmp_load_area+34],eax
|
||||
|
||||
yespicsize:
|
||||
mov eax,bmp_load_area
|
||||
mov ebx,eax
|
||||
add ebx, [bmp_load_area+2];file size
|
||||
inc ebx
|
||||
mov dword [bmp_soi],ebx ;soi-start of image area for drawing
|
||||
add eax, [bmp_load_area+10]
|
||||
mov dword [sop],eax ;sop-start of picture in file
|
||||
add eax, [bmp_load_area+34]
|
||||
mov dword [eop],eax ;eop-end of picture in file
|
||||
mov eax, [bmp_load_area+18]
|
||||
lea eax,[eax+2*eax] ;3x pixels in eax
|
||||
|
||||
mov edi,dword [bmp_soi] ;initializing
|
||||
mov esi,dword [eop]
|
||||
sub esi,dword [bps]
|
||||
|
||||
|
||||
nextstring:
|
||||
push edi
|
||||
cmp word [bmp_load_area+28],24
|
||||
jne convertno32
|
||||
|
||||
mov ecx,[dwps]
|
||||
cld
|
||||
rep movsd
|
||||
convert1:
|
||||
pop edi
|
||||
sub esi,dword [bps]
|
||||
sub esi,dword [bps]
|
||||
cmp esi,dword [sop]
|
||||
jb end_bmp;nomorestring
|
||||
add edi,eax
|
||||
jmp nextstring
|
||||
|
||||
; nomorestring:
|
||||
; jmp end_bmp
|
||||
|
||||
convertno32:
|
||||
mov ebx,bmp_load_area
|
||||
add ebx, [bmp_load_area+14]
|
||||
add ebx,14 ;start of color table
|
||||
push esi
|
||||
add esi,dword [bps]
|
||||
mov dword [eos],esi
|
||||
pop esi
|
||||
nextelem:
|
||||
push eax
|
||||
movzx eax,byte [esi]
|
||||
cmp word [bmp_load_area+28],4
|
||||
je convert4bpp
|
||||
cmp word [bmp_load_area+28],1
|
||||
je convert1bpp
|
||||
call converttable
|
||||
convert2:
|
||||
pop eax
|
||||
inc esi
|
||||
cmp esi,dword [eos]
|
||||
jae convert1
|
||||
add edi,3
|
||||
jmp nextelem
|
||||
|
||||
convert4bpp:
|
||||
shl ax,4
|
||||
shr al,4
|
||||
push ax
|
||||
movzx eax,ah
|
||||
call converttable
|
||||
add edi,3
|
||||
pop ax
|
||||
movzx eax,al
|
||||
call converttable
|
||||
jmp convert2
|
||||
|
||||
convert1bpp:
|
||||
mov ecx,eax
|
||||
mov edx,7
|
||||
nextbit:
|
||||
xor eax,eax
|
||||
bt ecx,edx
|
||||
jnc noaddelem
|
||||
inc eax
|
||||
noaddelem:
|
||||
push edx
|
||||
call converttable
|
||||
pop edx
|
||||
dec edx
|
||||
cmp edx,0xffffffff
|
||||
je convert2
|
||||
add edi,3
|
||||
jmp nextbit
|
||||
|
||||
converttable:
|
||||
shl eax,2
|
||||
add eax,ebx
|
||||
mov edx, dword [eax]
|
||||
mov dword [edi],edx
|
||||
ret
|
||||
|
||||
|
||||
; DATA AREA
|
||||
|
||||
;status dd 0 ;bit0=1 if file thread is created
|
||||
bps dd 0
|
||||
dwps dd 0
|
||||
;soi dd 0
|
||||
sop dd 0
|
||||
eop dd 0
|
||||
eos dd 0
|
||||
;process dd 0
|
||||
|
||||
end_bmp:
|
||||
; mov eax,dword [soi]
|
||||
; mov dword [bmp_soi],eax
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
; LOADBMP - Load bmp image from file
|
||||
; (SYNTAX) LOADBMP 'file_path',temp_area(rb 0x10000),load_area,dd soi
|
||||
; (SAMPLE) LOADBMP '/sys/menuet.bmp',temp_area,I_END,tsoi
|
||||
; ( NOTE ) Macros create on Base of
|
||||
; Picture browser by lisovin@26.ru & Ivan Poddubny
|
||||
; SOI - Start of image
|
||||
|
||||
macro loadbmp bmp_file_name,bmp_temp_area,bmp_load_area,bmp_soi
|
||||
{
|
||||
local status,bps,dwps,soi,sop,eop,eos,process,fileinfo,string,end_bmp
|
||||
local converttable,noaddelem,nextbit,convert1bpp,convert4bpp,convert2
|
||||
local nextelem,convertno32,nomorestring,convert1,nextstring,yespicsize
|
||||
local noaddword
|
||||
;local qwe,bmpfn
|
||||
|
||||
mov dword [fileinfo+8],1 ; how many blocks to read (1)
|
||||
mov eax,58
|
||||
mov ebx,fileinfo
|
||||
mcall
|
||||
mov eax,[bmp_load_area+2]
|
||||
shr eax,9 ; <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> 512 <20> <20>ਡ<EFBFBD><E0A8A1><EFBFBD><EFBFBD> 1 - <20><><EFBFBD><EFBFBD>稬 <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
inc eax
|
||||
mov dword [fileinfo+8],eax
|
||||
mov eax,58
|
||||
mov ebx,fileinfo
|
||||
mcall
|
||||
|
||||
; jmp qwe
|
||||
;bmpfn db bmp_file_name
|
||||
;qwe:
|
||||
; mov eax,6
|
||||
; mov ebx,bmpfn
|
||||
; mov ecx,0
|
||||
; mov edx,0xFFFFFF
|
||||
; mov esi,bmp_load_area
|
||||
; mov edi,0
|
||||
; mcall
|
||||
|
||||
; convert:
|
||||
movzx eax,word [bmp_load_area+28]
|
||||
mul dword [bmp_load_area+18]
|
||||
mov ebx,32
|
||||
div ebx
|
||||
test edx,edx
|
||||
je noaddword
|
||||
inc eax
|
||||
noaddword:
|
||||
mov dword [dwps],eax ;dwps-doublewords per string
|
||||
shl eax,2
|
||||
mov dword [bps],eax ;bps-bytes per string
|
||||
|
||||
cmp dword [bmp_load_area+34],0
|
||||
jne yespicsize ;if picture size is defined
|
||||
mul dword [bmp_load_area+22]
|
||||
mov dword [bmp_load_area+34],eax
|
||||
|
||||
yespicsize:
|
||||
mov eax,bmp_load_area
|
||||
push eax
|
||||
add eax, [bmp_load_area+2];file size
|
||||
inc eax
|
||||
mov dword [soi],eax ;soi-start of image area for drawing
|
||||
pop eax
|
||||
add eax, [bmp_load_area+10]
|
||||
mov dword [sop],eax ;sop-start of picture in file
|
||||
add eax, [bmp_load_area+34]
|
||||
mov dword [eop],eax ;eop-end of picture in file
|
||||
mov eax, [bmp_load_area+18]
|
||||
mov ebx,3
|
||||
mul ebx ;3x pixels in eax
|
||||
|
||||
mov edi,dword [soi] ;initializing
|
||||
mov esi,dword [eop]
|
||||
sub esi,dword [bps]
|
||||
|
||||
|
||||
nextstring:
|
||||
push edi
|
||||
cmp word [bmp_load_area+28],24
|
||||
jne convertno32
|
||||
|
||||
mov ecx,[dwps]
|
||||
cld
|
||||
rep movsd
|
||||
convert1:
|
||||
pop edi
|
||||
sub esi,dword [bps]
|
||||
sub esi,dword [bps]
|
||||
cmp esi,dword [sop]
|
||||
jb nomorestring
|
||||
add edi,eax
|
||||
jmp nextstring
|
||||
|
||||
nomorestring:
|
||||
jmp end_bmp
|
||||
|
||||
convertno32:
|
||||
mov ebx,bmp_load_area
|
||||
add ebx, [bmp_load_area+14]
|
||||
add ebx,14 ;start of color table
|
||||
push esi
|
||||
add esi,dword [bps]
|
||||
mov dword [eos],esi
|
||||
pop esi
|
||||
nextelem:
|
||||
push eax
|
||||
movzx eax,byte [esi]
|
||||
cmp word [bmp_load_area+28],4
|
||||
je convert4bpp
|
||||
cmp word [bmp_load_area+28],1
|
||||
je convert1bpp
|
||||
call converttable
|
||||
convert2:
|
||||
pop eax
|
||||
inc esi
|
||||
cmp esi,dword [eos]
|
||||
jae convert1
|
||||
add edi,3
|
||||
jmp nextelem
|
||||
|
||||
convert4bpp:
|
||||
shl ax,4
|
||||
shr al,4
|
||||
push ax
|
||||
movzx eax,ah
|
||||
call converttable
|
||||
add edi,3
|
||||
pop ax
|
||||
movzx eax,al
|
||||
call converttable
|
||||
jmp convert2
|
||||
|
||||
convert1bpp:
|
||||
mov ecx,eax
|
||||
mov edx,7
|
||||
nextbit:
|
||||
xor eax,eax
|
||||
bt ecx,edx
|
||||
jnc noaddelem
|
||||
inc eax
|
||||
noaddelem:
|
||||
push edx
|
||||
call converttable
|
||||
pop edx
|
||||
dec edx
|
||||
cmp edx,0xffffffff
|
||||
je convert2
|
||||
add edi,3
|
||||
jmp nextbit
|
||||
|
||||
converttable:
|
||||
shl eax,2
|
||||
add eax,ebx
|
||||
mov edx, dword [eax]
|
||||
mov dword [edi],edx
|
||||
ret
|
||||
|
||||
|
||||
; DATA AREA
|
||||
|
||||
;status dd 0 ;bit0=1 if file thread is created
|
||||
bps dd 0
|
||||
dwps dd 0
|
||||
soi dd 0
|
||||
sop dd 0
|
||||
eop dd 0
|
||||
eos dd 0
|
||||
;process dd 0
|
||||
|
||||
; DATA AREA
|
||||
fileinfo:
|
||||
dd 0
|
||||
dd 0
|
||||
dd 1 ;number of blocks of 512 bytes
|
||||
dd bmp_load_area
|
||||
dd bmp_temp_area
|
||||
string:
|
||||
db bmp_file_name,0
|
||||
db ' '
|
||||
db ' '
|
||||
db ' '
|
||||
db ' ',0
|
||||
|
||||
|
||||
end_bmp:
|
||||
mov eax,dword [soi]
|
||||
mov dword [bmp_soi],eax
|
||||
|
||||
}
|
@@ -1,499 +0,0 @@
|
||||
lang equ ru_RU ; ru_RU en_US fr_FR de_DE fi_FI
|
||||
|
||||
;
|
||||
; Assembler
|
||||
; SMALL
|
||||
; CODE
|
||||
; Libary
|
||||
;
|
||||
; Ver 0.09 By Pavlushin Evgeni (RUSSIA)
|
||||
; www.waptap@mail.ru
|
||||
|
||||
;InfoList
|
||||
;0.01 scank,putpix,puttxt
|
||||
;0.02 label,random,colors
|
||||
;0.03 window,startwd,endwd,attributes
|
||||
;0.04 close,delay,scevent ~30.04.2004
|
||||
;0.05 small random, ~04.05.2004
|
||||
;0.06 wtevent ~09.05.2004
|
||||
;0.07 timeevent ~23.05.2004
|
||||
;0.08 txtput ~14.06.2004
|
||||
;0.09 opendialog,savedialog ~20.06.2004
|
||||
|
||||
macro opendialog redproc,openoff,erroff,path,testtime
|
||||
{
|
||||
local still, dlg_file, clip_file, redwait
|
||||
local button, key, red, zzz, still, zzz2, incf, file_is_open, zzz3
|
||||
|
||||
mov ecx,200
|
||||
zzz3:
|
||||
mov byte [path+ecx-1],0
|
||||
loop zzz3
|
||||
|
||||
dec byte [clip_file+7]
|
||||
incf:
|
||||
inc byte [clip_file+7]
|
||||
mov eax,6
|
||||
mov ebx,clip_file
|
||||
mov ecx,0
|
||||
or edx,-1
|
||||
mov esi,path
|
||||
mcall
|
||||
cmp byte [clip_file+7],'Z'
|
||||
je erroff
|
||||
cmp eax,0xffffffff
|
||||
jne incf
|
||||
|
||||
mov ecx,200
|
||||
zzz2:
|
||||
mov byte [path+ecx],0
|
||||
loop zzz2
|
||||
|
||||
mov ebx,clip_file
|
||||
mov ecx,path
|
||||
mov edx,100
|
||||
mov esi,0
|
||||
mov eax,33
|
||||
mcall
|
||||
|
||||
mov ebx,dlg_file
|
||||
mov ecx,clip_file
|
||||
mov eax,19
|
||||
mcall
|
||||
|
||||
still:
|
||||
scevent red,key,button
|
||||
cmp byte [path],0
|
||||
jne file_is_open
|
||||
cmp dword [redwait],testtime ;20
|
||||
jnae zzz
|
||||
mov eax,6
|
||||
mov ebx,clip_file
|
||||
mov ecx,0
|
||||
mov edx,-1
|
||||
mov esi,path
|
||||
mcall
|
||||
cmp eax,0xffffffff
|
||||
je erroff ;errexit
|
||||
mov dword [redwait],0
|
||||
zzz:
|
||||
delay 5
|
||||
inc dword [redwait]
|
||||
jmp still
|
||||
|
||||
file_is_open:
|
||||
mov eax,32
|
||||
mov ebx,clip_file
|
||||
mcall
|
||||
jmp openoff
|
||||
|
||||
key: ; key
|
||||
mcall ; read (eax=2)
|
||||
jmp still
|
||||
button: ; button
|
||||
mov eax,17 ; get id
|
||||
mcall
|
||||
cmp ah,1 ; button id=1 ?
|
||||
jne still
|
||||
mov eax,-1 ; close this program
|
||||
mcall
|
||||
|
||||
red:
|
||||
call redproc
|
||||
jmp still
|
||||
|
||||
dlg_file db 'SYSXTREE '
|
||||
clip_file db 'OPENCLPACLP'
|
||||
db 'O' ;Dialog type O-open S-save
|
||||
db 0 ;Marker
|
||||
redwait dd 0
|
||||
}
|
||||
|
||||
macro savedialog redproc,openoff,erroff,path,testtime
|
||||
{
|
||||
local still, dlg_file, clip_file, redwait, zzz3
|
||||
local button, key, red, zzz, still, zzz2, incf, file_is_open
|
||||
|
||||
mov ecx,200
|
||||
zzz3:
|
||||
mov byte [path+ecx-1],0
|
||||
loop zzz3
|
||||
|
||||
dec byte [clip_file+7]
|
||||
incf:
|
||||
inc byte [clip_file+7]
|
||||
mov eax,6
|
||||
mov ebx,clip_file
|
||||
mov ecx,0
|
||||
mov edx,-1
|
||||
mov esi,path
|
||||
mcall
|
||||
cmp byte [clip_file+7],'Z'
|
||||
je erroff
|
||||
cmp eax,0xffffffff
|
||||
jne incf
|
||||
|
||||
mov ecx,200
|
||||
zzz2:
|
||||
mov byte [path+ecx],0
|
||||
loop zzz2
|
||||
|
||||
mov ebx,clip_file
|
||||
mov ecx,path
|
||||
mov edx,100
|
||||
mov esi,0
|
||||
mov eax,33
|
||||
mcall
|
||||
|
||||
mov ebx,dlg_file
|
||||
mov ecx,clip_file
|
||||
mov eax,19
|
||||
mcall
|
||||
|
||||
still:
|
||||
scevent red,key,button
|
||||
cmp byte [path],0
|
||||
jne file_is_open
|
||||
cmp dword [redwait],testtime ;20
|
||||
jnae zzz
|
||||
mov eax,6
|
||||
mov ebx,clip_file
|
||||
mov ecx,0
|
||||
mov edx,-1
|
||||
mov esi,path
|
||||
mcall
|
||||
cmp eax,0xffffffff
|
||||
je erroff ;errexit
|
||||
mov dword [redwait],0
|
||||
zzz:
|
||||
delay 5
|
||||
inc dword [redwait]
|
||||
jmp still
|
||||
|
||||
file_is_open:
|
||||
mov eax,32
|
||||
mov ebx,clip_file
|
||||
mcall
|
||||
jmp openoff
|
||||
|
||||
key: ; key
|
||||
mcall ; read (eax=2)
|
||||
jmp still
|
||||
button: ; button
|
||||
mov eax,17 ; get id
|
||||
mcall
|
||||
cmp ah,1 ; button id=1 ?
|
||||
jne still
|
||||
mov eax,-1 ; close this program
|
||||
mcall
|
||||
|
||||
red:
|
||||
call redproc
|
||||
jmp still
|
||||
|
||||
dlg_file db 'SYSXTREE '
|
||||
clip_file db 'SAVECLPACLP'
|
||||
db 'S' ;Dialog type O-open S-save
|
||||
db 0 ;Marker
|
||||
redwait dd 0
|
||||
}
|
||||
|
||||
|
||||
; RANDOM - generate random count (small)
|
||||
; (SYNTAX) RANDOM MaxCount,OutArgument
|
||||
; (SAMPLE) RANDOM 10000,eax
|
||||
; ( NOTE ) Maxint<65536 ; use random 65536,eax for more combinations
|
||||
|
||||
randomuse = 0
|
||||
|
||||
macro random arg1,arg2
|
||||
{
|
||||
local rxproc
|
||||
randomuse = randomuse + 1
|
||||
|
||||
jmp rxproc
|
||||
|
||||
if defined randomuse & randomuse = 1
|
||||
randomproc:
|
||||
jmp rnj
|
||||
rsx1 dw 0x4321
|
||||
rsx2 dw 0x1234
|
||||
rnj:
|
||||
; mov eax,arg1
|
||||
push bx
|
||||
push cx
|
||||
push dx
|
||||
push si
|
||||
push di
|
||||
mov cx,ax
|
||||
mov ax,word ptr rsx1
|
||||
mov bx,word ptr rsx2
|
||||
mov si,ax
|
||||
mov di,bx
|
||||
mov dl,ah
|
||||
mov ah,al
|
||||
mov al,bh
|
||||
mov bh,bl
|
||||
xor bl,bl
|
||||
rcr dl,1
|
||||
rcr ax,1
|
||||
rcr bx,1
|
||||
add bx,di
|
||||
adc ax,si
|
||||
add bx,0x62e9
|
||||
adc ax,0x3619
|
||||
mov word ptr rsx1,bx
|
||||
mov word ptr rsx2,ax
|
||||
xor dx,dx
|
||||
cmp ax,0
|
||||
je nodiv
|
||||
cmp cx,0
|
||||
je nodiv
|
||||
div cx
|
||||
nodiv:
|
||||
mov ax,dx
|
||||
pop di
|
||||
pop si
|
||||
pop dx
|
||||
pop cx
|
||||
pop bx
|
||||
; mov arg2,0
|
||||
; mov arg2,eax
|
||||
ret
|
||||
end if
|
||||
|
||||
rxproc:
|
||||
mov eax,arg1
|
||||
call randomproc
|
||||
mov arg2,0
|
||||
mov arg2,eax
|
||||
}
|
||||
|
||||
macro scank
|
||||
{
|
||||
mov eax,10
|
||||
mcall
|
||||
}
|
||||
|
||||
macro putpix x,y,color
|
||||
{
|
||||
mov ebx,x
|
||||
mov ecx,y
|
||||
mov edx,color
|
||||
mov eax,1
|
||||
mcall
|
||||
}
|
||||
|
||||
macro puttxt x,y,offs,size,color
|
||||
{
|
||||
mov ebx,x
|
||||
shl ebx,16
|
||||
add ebx,y
|
||||
mov ecx,color
|
||||
mov edx,offs
|
||||
mov esi,size
|
||||
mov eax,4
|
||||
mcall
|
||||
}
|
||||
|
||||
;_ equ '____'
|
||||
|
||||
;macro libtest x,y,color
|
||||
;{
|
||||
;if x = as dword
|
||||
; mov ebx,x
|
||||
;end if
|
||||
; mov ecx,y
|
||||
; mov edx,color
|
||||
; mov eax,1
|
||||
; mcall
|
||||
;}
|
||||
|
||||
|
||||
macro outcount data, x, y, color, numtype
|
||||
{
|
||||
mov ecx,data
|
||||
mov ebx,numtype
|
||||
mov bl,0
|
||||
mov edx,x*65536+y
|
||||
mov esi,color
|
||||
mov eax,47
|
||||
mcall
|
||||
}
|
||||
|
||||
; SCEVENT - Scan event
|
||||
|
||||
macro scevent red,key,but
|
||||
{
|
||||
mov eax,11
|
||||
mcall
|
||||
dec eax
|
||||
jz red
|
||||
dec eax
|
||||
jz key
|
||||
dec eax
|
||||
jz but
|
||||
}
|
||||
|
||||
; WTEVENT - Wait event
|
||||
|
||||
macro wtevent red,key,but
|
||||
{
|
||||
mov eax,10
|
||||
mcall
|
||||
dec eax
|
||||
jz red
|
||||
dec eax
|
||||
jz key
|
||||
dec eax
|
||||
jz but
|
||||
}
|
||||
|
||||
; TIMEEVENT - Wite for event with timeout
|
||||
|
||||
macro timeevent xfps,noevent,red,key,but
|
||||
{
|
||||
mov eax,23
|
||||
mov ebx,xfps
|
||||
mcall
|
||||
cmp eax,0
|
||||
je noevent
|
||||
dec eax
|
||||
jz red
|
||||
dec eax
|
||||
jz key
|
||||
dec eax
|
||||
jz but
|
||||
}
|
||||
|
||||
|
||||
; CLOSE - Close program
|
||||
|
||||
macro close
|
||||
{
|
||||
mov eax,-1
|
||||
mcall
|
||||
}
|
||||
|
||||
; DELAY - Create delay 1/100 sec
|
||||
; (SYNTAX) Delay time
|
||||
; (SAMPLE) Delay 100 ;delay 2 sec 1/100*200=2 sec
|
||||
|
||||
macro delay arg1
|
||||
{
|
||||
mov eax,5
|
||||
mov ebx,arg1
|
||||
mcall
|
||||
}
|
||||
|
||||
; WINDOW - Draw window
|
||||
; (SYNTAX) WINDOW Xstart,Ystart,'Text',Color
|
||||
; (SAMPLE) WINDOW 10,10,640+8,480+24,window_Skinned
|
||||
|
||||
macro window arg1,arg2,arg3,arg4,arg5
|
||||
{
|
||||
mov ebx,arg1*65536+arg3
|
||||
mov ecx,arg2*65536+arg4
|
||||
mov edx,arg5
|
||||
mov eax,0
|
||||
mcall
|
||||
}
|
||||
|
||||
macro colorwindow arg1,arg2,arg3,arg4,arg5,arg6,arg7
|
||||
{
|
||||
mov ebx,arg1*65536+arg3
|
||||
mov ecx,arg2*65536+arg4
|
||||
mov edx,arg5
|
||||
mov esi,arg6
|
||||
mov edi,arg7
|
||||
mov eax,0
|
||||
mcall
|
||||
}
|
||||
|
||||
|
||||
; STARTWD - Start of window draw
|
||||
|
||||
macro startwd
|
||||
{
|
||||
mov eax,12
|
||||
mov ebx,1
|
||||
mcall
|
||||
}
|
||||
|
||||
; ENDWD - End window draw
|
||||
|
||||
macro endwd
|
||||
{
|
||||
mov eax,12
|
||||
mov ebx,2
|
||||
mcall
|
||||
}
|
||||
|
||||
; LABEL - Put text to frame
|
||||
; (SYNTAX) LABEL Xstart,Ystart,'Text',Color
|
||||
; (SAMPLE) LABEL 10,12,'Hello World!',cl_Green+font_Big
|
||||
|
||||
macro label arg1,arg2,arg3,arg4
|
||||
{
|
||||
local asd,lab
|
||||
jmp asd
|
||||
lab db arg3 ;arg label
|
||||
asd:
|
||||
mov ebx,arg1 ;arg1=y arg2=x
|
||||
shl ebx,16
|
||||
add ebx,arg2
|
||||
mov ecx,arg4 ;arg4 color
|
||||
mov edx,lab
|
||||
mov esi,asd-lab ;calc size
|
||||
mov eax,4
|
||||
mcall
|
||||
}
|
||||
|
||||
;Key's
|
||||
key_Up equ 178
|
||||
key_Down equ 177
|
||||
key_Right equ 179
|
||||
key_Left equ 176
|
||||
key_Esc equ 27
|
||||
key_Space equ 32
|
||||
key_Enter equ 13
|
||||
key_Bspace equ 8
|
||||
key_F1 equ 50
|
||||
key_F2 equ 51
|
||||
key_F3 equ 52
|
||||
key_F4 equ 53
|
||||
key_F5 equ 54
|
||||
key_F6 equ 55
|
||||
key_F7 equ 56
|
||||
key_F8 equ 57
|
||||
key_F9 equ 48
|
||||
key_F10 equ 49
|
||||
key_F11 equ 68
|
||||
key_F12 equ 255
|
||||
key_Home equ 180
|
||||
key_End equ 181
|
||||
key_PgUp equ 184
|
||||
key_PgDown equ 183
|
||||
|
||||
;Attributes
|
||||
|
||||
;Window Attributes
|
||||
window_Skinned equ 0x03000000
|
||||
window_Type2 equ 0x02000000
|
||||
window_Type1 equ 0x00000000
|
||||
window_Reserve equ 0x01000000
|
||||
|
||||
;Font Attributes
|
||||
font_Big equ 0x10000000
|
||||
|
||||
;Colors
|
||||
cl_White equ 0x00ffffff
|
||||
cl_Black equ 0x00000000
|
||||
cl_Grey equ 0x00888888
|
||||
cl_Red equ 0x00ff0000
|
||||
cl_Lime equ 0x0000ff00
|
||||
cl_Green equ 0x0000af00
|
||||
cl_Blue equ 0x000000ff
|
||||
cl_Purple equ 0x008080ff
|
||||
cl_Violet equ 0x008040ff
|
||||
cl_Cyan equ 0x0040e0ff
|
3
programs/demos/3dcube2/trunk/build.bat
Normal file
3
programs/demos/3dcube2/trunk/build.bat
Normal file
@@ -0,0 +1,3 @@
|
||||
@fasm 3dcube2.asm 3dcube2
|
||||
@kpack 3dcube2
|
||||
if not exist 3dcube2 ( @pause )
|
@@ -1,6 +0,0 @@
|
||||
@erase lang.inc
|
||||
@echo lang fix en_US >lang.inc
|
||||
@fasm 3dcube2.asm 3dcube2
|
||||
@erase lang.inc
|
||||
@kpack 3dcube2
|
||||
@pause
|
@@ -1,6 +0,0 @@
|
||||
@erase lang.inc
|
||||
@echo lang fix ru_RU >lang.inc
|
||||
@fasm 3dcube2.asm 3dcube2
|
||||
@erase lang.inc
|
||||
@kpack 3dcube2
|
||||
@pause
|
@@ -1,82 +1,60 @@
|
||||
;
|
||||
; FIRE for MENUET - Compile with FASM
|
||||
; Fire for Kolibri OS - Compile with FASM
|
||||
;
|
||||
|
||||
use32
|
||||
org 0
|
||||
db 'MENUET01' ; 8 byte id
|
||||
dd 1 ; header version
|
||||
dd START ; program start
|
||||
dd image_end ; image size
|
||||
dd mem_end ; reguired amount of memory
|
||||
dd stacktop
|
||||
dd 0,0 ; no parameters, no path
|
||||
|
||||
org 0x0
|
||||
db 'MENUET01' ; 8 byte id
|
||||
dd 1 ; header version
|
||||
dd START ; program start
|
||||
dd I_END ; image size
|
||||
dd mem_end ; reguired amount of memory
|
||||
dd mem_end
|
||||
dd 0,0 ; no parameters, no path
|
||||
include '..\..\macros.inc'
|
||||
include '..\..\KOSfuncs.inc'
|
||||
|
||||
Screen_W equ 480
|
||||
|
||||
include '..\..\..\macros.inc'
|
||||
|
||||
START:
|
||||
|
||||
red:
|
||||
|
||||
; ************************************************
|
||||
; ********* WINDOW DEFINITIONS AND DRAW **********
|
||||
; ************************************************
|
||||
|
||||
draw_window:
|
||||
|
||||
mov eax,12 ; tell os about redraw
|
||||
mov ebx,1
|
||||
mcall
|
||||
mcall SF_REDRAW, SSF_BEGIN_DRAW
|
||||
|
||||
xor eax,eax ; define and draw window
|
||||
mov ebx,100*65536+321
|
||||
mov ecx,70*65536+222
|
||||
mov edx,0x01000000
|
||||
mov esi,0x00000000
|
||||
mov edi,0x00000000
|
||||
mcall
|
||||
mcall SF_CREATE_WINDOW,<100,Screen_W+1>,<70,222>,0x01000000,0,0
|
||||
|
||||
mcall 13,0*65536+321,0*65536+30,0
|
||||
mcall ,0*65536+1 ,0*65536+222
|
||||
mcall ,321*65536+1,0*65536+223
|
||||
mcall ,0*65536+321,222*65536+1
|
||||
mcall SF_DRAW_RECT,<0,Screen_W+1>,<0,30>,0
|
||||
mcall ,<0,1>,<0,222>
|
||||
mcall ,<Screen_W+1,1>,<0,223>
|
||||
mcall ,<0,Screen_W+1>,<222,1>
|
||||
|
||||
mcall SF_DRAW_TEXT,<(Screen_W-108)/2,8>,dword 0x00FFFFFF,text,textlen-text
|
||||
|
||||
mov al,4 ; 'FIRE FOR KOLIBRI'
|
||||
mov ebx,106*65536+8
|
||||
mov ecx,dword 0x00FFFFFF
|
||||
mov edx,text
|
||||
mov esi,textlen-text
|
||||
mcall
|
||||
mcall SF_DEFINE_BUTTON,<(Screen_W+1-19),12>,<5,12>,1,0x009a0000
|
||||
|
||||
mov al,8
|
||||
mov ebx,(321-19)*65536+12 ; button start x & size
|
||||
mov ecx,5*65536+12 ; button start y & size
|
||||
mov edx,1 ; button number
|
||||
mov esi,0x009a0000
|
||||
mcall
|
||||
mov ebx,ecx ;5*65536+12
|
||||
inc edx
|
||||
mcall
|
||||
|
||||
mov ebx,ecx ;5*65536+12
|
||||
inc edx
|
||||
mcall
|
||||
mcall ,<18,12>
|
||||
|
||||
mov ebx,18*65536+12
|
||||
inc edx
|
||||
mcall
|
||||
mcall ,<31,12>
|
||||
|
||||
mov ebx,31*65536+12
|
||||
inc edx
|
||||
mcall
|
||||
|
||||
mov al,12 ; tell os about redraw end
|
||||
mov ebx,2
|
||||
mcall
|
||||
mcall SF_REDRAW, SSF_END_DRAW
|
||||
|
||||
sta: ; calculate fire image
|
||||
|
||||
mov esi, FireScreen+0x2300-80
|
||||
mov ecx, 80
|
||||
mov esi, FireScreen.end+Screen_W*3-Screen_W/4
|
||||
mov ecx, Screen_W/4
|
||||
mov eax, [FireSeed]
|
||||
|
||||
NEWLINE:
|
||||
@@ -89,7 +67,7 @@ sta: ; calculate fire image
|
||||
|
||||
mov [FireSeed], eax
|
||||
|
||||
mov ecx, 0x2300-80
|
||||
mov ecx, (Screen_W*200)/8+Screen_W*3-Screen_W/4
|
||||
sub esi, ecx
|
||||
xor edx, edx
|
||||
xor eax, eax
|
||||
@@ -103,7 +81,7 @@ sta: ; calculate fire image
|
||||
add eax, edx
|
||||
mov dl, [esi]
|
||||
add eax, edx
|
||||
mov dl, [esi + 80]
|
||||
mov dl, [esi + Screen_W/4]
|
||||
jmp typedone
|
||||
notype1:
|
||||
|
||||
@@ -114,7 +92,7 @@ sta: ; calculate fire image
|
||||
; mov dl, [esi - 2]
|
||||
; add eax, edx
|
||||
lea eax, [eax + edx*2]
|
||||
mov dl, [esi + 78]
|
||||
mov dl, [esi + Screen_W/4-2]
|
||||
; notype2:
|
||||
|
||||
; type 2 is never used
|
||||
@@ -124,7 +102,7 @@ sta: ; calculate fire image
|
||||
; add eax, edx
|
||||
; mov dl, [esi]
|
||||
; add eax, edx
|
||||
; mov dl, [esi + 80]
|
||||
; mov dl, [esi + Screen_W/4]
|
||||
; notype3:
|
||||
|
||||
typedone:
|
||||
@@ -135,12 +113,10 @@ typedone:
|
||||
|
||||
ZERO:
|
||||
|
||||
mov [esi - 81], al
|
||||
mov [esi - Screen_W/4-1], al
|
||||
loop FIRELOOP
|
||||
|
||||
mov al, 5 ; in this moment always high 24 bits of eax are zero!
|
||||
mov ebx,[delay]
|
||||
mcall
|
||||
mcall SF_SLEEP,[delay]
|
||||
|
||||
inc [calc]
|
||||
cmp [calc], byte 2
|
||||
@@ -169,7 +145,7 @@ typedone:
|
||||
mov [edi+3],ecx
|
||||
mov [edi+6],ecx
|
||||
mov [edi+9],cx
|
||||
lea ebx, [edi+320*3]
|
||||
lea ebx, [edi+Screen_W*3]
|
||||
mov [ebx+0],ecx
|
||||
mov [ebx+3],ecx
|
||||
mov [ebx+6],ecx
|
||||
@@ -177,50 +153,43 @@ typedone:
|
||||
|
||||
add edi,12
|
||||
inc edx
|
||||
cmp edx,80
|
||||
cmp edx,Screen_W/4
|
||||
jnz nnl
|
||||
xor edx,edx
|
||||
add edi,320*3
|
||||
add edi,Screen_W*3
|
||||
nnl:
|
||||
cmp esi,FireScreen+8000; 0x2000
|
||||
cmp esi,FireScreen.end
|
||||
jnz newc
|
||||
|
||||
mov al,7 ; display image
|
||||
; high 24 bits of eax are zero!
|
||||
pop ebx
|
||||
mov ecx,4*80*65536+200
|
||||
mov edx,1*65536+22
|
||||
mcall
|
||||
mcall SF_PUT_IMAGE,,<Screen_W,200>,<1,22>
|
||||
|
||||
nodrw:
|
||||
|
||||
mov eax,11 ; check if os wants to talk to us
|
||||
mcall
|
||||
mcall SF_CHECK_EVENT ; check if os wants to talk to us
|
||||
dec eax
|
||||
jz red
|
||||
jz draw_window
|
||||
cmp al, 3-1
|
||||
jnz nob4
|
||||
|
||||
button: ; get button id
|
||||
mov al,17
|
||||
mcall
|
||||
mcall SF_GET_BUTTON
|
||||
shr eax, 8
|
||||
|
||||
dec eax
|
||||
jnz noclose
|
||||
or eax,-1 ; close this program
|
||||
mcall
|
||||
noclose:
|
||||
jnz @f
|
||||
mcall SF_TERMINATE_PROCESS ; close this program
|
||||
@@:
|
||||
|
||||
dec eax ; change fire type
|
||||
jnz nob2
|
||||
jnz @f
|
||||
xor [type], 1
|
||||
nob2:
|
||||
@@:
|
||||
|
||||
dec eax ; change delay
|
||||
jnz nob3
|
||||
jnz @f
|
||||
xor [delay], 1
|
||||
nob3:
|
||||
@@:
|
||||
|
||||
dec eax ; change color
|
||||
jnz nob4
|
||||
@@ -233,7 +202,7 @@ typedone:
|
||||
fcok:
|
||||
mov [fcolor],eax
|
||||
mov edi,ImageData
|
||||
mov ecx,(320*600)/4
|
||||
mov ecx,(Screen_W*200*3)/4
|
||||
xor eax,eax
|
||||
rep stosd
|
||||
|
||||
@@ -246,19 +215,23 @@ fcolor dd 2
|
||||
xx db 'x'
|
||||
type db 0
|
||||
calc db 0
|
||||
delay dd 0
|
||||
delay dd 1
|
||||
FireSeed dd 0x1234
|
||||
text: db 'FIRE FOR KOLIBRI'
|
||||
text: db 'Fire for Kolibri'
|
||||
textlen:
|
||||
|
||||
I_END:
|
||||
align 4
|
||||
image_end:
|
||||
|
||||
FireScreen:
|
||||
rb 0x2300
|
||||
rb (Screen_W*200)/8 ;wisible fire
|
||||
.end:
|
||||
rb Screen_W*3 ;hidden fire (need for generation)
|
||||
ImageData:
|
||||
rb 320*200*3
|
||||
rb Screen_W*200*3
|
||||
|
||||
; stack
|
||||
align 512
|
||||
rb 512
|
||||
align 512
|
||||
rb 512
|
||||
stacktop:
|
||||
mem_end:
|
@@ -1,2 +0,0 @@
|
||||
@fasm fire.asm fire
|
||||
@pause
|
@@ -1,6 +1,9 @@
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
; SPDX-License-Identifier: GPL-2.0-only
|
||||
; A firework demo
|
||||
; Programmed by Yaniv LEVIATHAN
|
||||
; Copyright (C) 2010-2025 KolibriOS team
|
||||
;
|
||||
; Initially ðrogrammed by Yaniv Leviathan
|
||||
; http://yaniv.leviathanonline.com
|
||||
; Converted to DexOS, By Dex
|
||||
; Converted to KolibriOS, By Asper
|
||||
@@ -11,19 +14,24 @@
|
||||
; optionally AVX, AVX2, AVX512
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
use32
|
||||
org 0x0
|
||||
org 0
|
||||
|
||||
db 'MENUET01' ; 8 byte id
|
||||
dd 0x01 ; version
|
||||
dd 1 ; version
|
||||
dd STARTAPP ; program start
|
||||
dd I_END ; program image size
|
||||
dd E_END ; required amount of memory
|
||||
dd stacktop ; reserved=no extended header
|
||||
dd 0, 0
|
||||
|
||||
include '../../../macros.inc'
|
||||
SCREEN_WIDTH = 320
|
||||
SCREEN_HEIGHT = 200
|
||||
include '../../macros.inc'
|
||||
include '../../KOSfuncs.inc'
|
||||
|
||||
SCREEN_WIDTH = 600 ;.. mod 8 == 0
|
||||
Screen_W dd SCREEN_WIDTH
|
||||
Screen_H dd 400
|
||||
lost_bytes dd 0
|
||||
|
||||
SIMD equ SSE
|
||||
SIMD_BYTES = 8
|
||||
; SSE 8
|
||||
@@ -46,41 +54,37 @@ PART_SIZE = 20
|
||||
macro shade
|
||||
{
|
||||
local .lop
|
||||
mov ecx, [Screen_H]
|
||||
imul ecx, [Screen_W]
|
||||
shr ecx, 3 ;ecx = Screen_W * Screen_H / SIMD_BYTES
|
||||
mov edi, [buffer]
|
||||
if SIMD eq SSE
|
||||
mov ecx, SCREEN_WIDTH * SCREEN_HEIGHT / SIMD_BYTES
|
||||
mov edi, buffer
|
||||
movq mm1, qword [sub_mask]
|
||||
.lop:
|
||||
.lop:
|
||||
movq mm0, [edi]
|
||||
psubusb mm0, mm1
|
||||
movq [edi], mm0
|
||||
add edi, SIMD_BYTES
|
||||
loop .lop
|
||||
else if SIMD eq AVX
|
||||
mov ecx, SCREEN_WIDTH * SCREEN_HEIGHT / SIMD_BYTES
|
||||
mov edi, buffer
|
||||
vmovdqa xmm1, xword [sub_mask]
|
||||
.lop:
|
||||
.lop:
|
||||
vmovdqa xmm0, [edi]
|
||||
vpsubusb xmm0, xmm0, xmm1
|
||||
vmovdqa [edi], xmm0
|
||||
add edi, SIMD_BYTES
|
||||
loop .lop
|
||||
else if SIMD eq AVX2
|
||||
mov ecx, SCREEN_WIDTH * SCREEN_HEIGHT / SIMD_BYTES
|
||||
mov edi, buffer
|
||||
vmovdqa ymm1, yword [sub_mask]
|
||||
.lop:
|
||||
.lop:
|
||||
vmovdqa ymm0, [edi]
|
||||
vpsubusb ymm0, ymm0, ymm1
|
||||
vmovdqa [edi], ymm0
|
||||
add edi, SIMD_BYTES
|
||||
loop .lop
|
||||
else if SIMD eq AVX512
|
||||
mov ecx, SCREEN_WIDTH * SCREEN_HEIGHT / SIMD_BYTES
|
||||
mov edi, buffer
|
||||
vmovdqa64 zmm1, zword [sub_mask]
|
||||
.lop:
|
||||
.lop:
|
||||
vmovdqa64 zmm0, [edi]
|
||||
vpsubusb zmm0, zmm0, zmm1
|
||||
vmovdqa64 [edi], zmm0
|
||||
@@ -91,10 +95,18 @@ end if
|
||||
|
||||
macro blur_prepare
|
||||
{
|
||||
mov ecx, (SCREEN_WIDTH * SCREEN_HEIGHT - SCREEN_WIDTH * 2 - SIMD_BYTES*2) / SIMD_BYTES
|
||||
mov edi, buffer + SCREEN_WIDTH + SIMD_BYTES
|
||||
mov ecx, [Screen_H]
|
||||
dec ecx
|
||||
dec ecx
|
||||
imul ecx, [Screen_W]
|
||||
sub ecx, SIMD_BYTES*2
|
||||
shr ecx, 3 ;ecx = (Screen_W * (Screen_H - 2) - SIMD_BYTES*2) / SIMD_BYTES
|
||||
mov edi, SIMD_BYTES
|
||||
add edi, [buffer]
|
||||
add edi, [Screen_W]
|
||||
}
|
||||
|
||||
; eax = [Screen_W]
|
||||
macro blur
|
||||
{
|
||||
local .lop
|
||||
@@ -104,8 +116,10 @@ if SIMD eq SSE
|
||||
movq mm1, [edi + 1]
|
||||
movq mm2, [edi - 1]
|
||||
movq mm3, mm0
|
||||
movq mm4, [edi - SCREEN_WIDTH]
|
||||
movq mm5, [edi + SCREEN_WIDTH]
|
||||
neg eax
|
||||
movq mm4, [edi + eax]
|
||||
neg eax
|
||||
movq mm5, [edi + eax]
|
||||
|
||||
pavgb mm0, mm1 ; mm0 = avg(cur,cur+1)
|
||||
pavgb mm3, mm2 ; mm3 = avg(cur,cur-1)
|
||||
@@ -120,11 +134,13 @@ else if SIMD eq AVX
|
||||
.lop:
|
||||
vmovdqa xmm0, [edi]
|
||||
vmovdqa xmm1, xmm0
|
||||
vmovdqa xmm2, [edi - SCREEN_WIDTH]
|
||||
neg eax
|
||||
vmovdqa xmm2, [edi + eax]
|
||||
neg eax
|
||||
|
||||
vpavgb xmm0, xmm0, [edi + 1]
|
||||
vpavgb xmm1, xmm1, [edi - 1]
|
||||
vpavgb xmm2, xmm2, [edi + SCREEN_WIDTH]
|
||||
vpavgb xmm2, xmm2, [edi + eax]
|
||||
vpavgb xmm1, xmm1, xmm2
|
||||
vpavgb xmm0, xmm0, xmm1
|
||||
|
||||
@@ -135,11 +151,13 @@ else if SIMD eq AVX2
|
||||
.lop:
|
||||
vmovdqa ymm0, [edi]
|
||||
vmovdqa ymm1, ymm0
|
||||
vmovdqa ymm2, [edi - SCREEN_WIDTH]
|
||||
neg eax
|
||||
vmovdqa ymm2, [edi + eax]
|
||||
neg eax
|
||||
|
||||
vpavgb ymm0, ymm0, [edi + 1]
|
||||
vpavgb ymm1, ymm1, [edi - 1]
|
||||
vpavgb ymm2, ymm2, [edi + SCREEN_WIDTH]
|
||||
vpavgb ymm2, ymm2, [edi + eax]
|
||||
vpavgb ymm1, ymm1, ymm2
|
||||
vpavgb ymm0, ymm0, ymm1
|
||||
|
||||
@@ -150,11 +168,13 @@ else if SIMD eq AVX512
|
||||
.lop:
|
||||
vmovdqa64 zmm0, [edi]
|
||||
vmovdqa64 zmm1, zmm0
|
||||
vmovdqa64 zmm2, [edi - SCREEN_WIDTH]
|
||||
neg eax
|
||||
vmovdqa64 zmm2, [edi + eax]
|
||||
neg eax
|
||||
|
||||
vpavgb zmm0, zmm0, [edi + 1]
|
||||
vpavgb zmm1, zmm1, [edi - 1]
|
||||
vpavgb zmm2, zmm2, [edi + SCREEN_WIDTH]
|
||||
vpavgb zmm2, zmm2, [edi + eax]
|
||||
vpavgb zmm1, zmm1, zmm2
|
||||
vpavgb zmm0, zmm0, zmm1
|
||||
|
||||
@@ -164,6 +184,7 @@ else if SIMD eq AVX512
|
||||
end if
|
||||
}
|
||||
|
||||
; eax = [Screen_W]
|
||||
macro blur_right
|
||||
{
|
||||
local .lop
|
||||
@@ -171,8 +192,8 @@ if SIMD eq SSE
|
||||
.lop:
|
||||
movq mm0, [edi]
|
||||
movq mm1, [edi + 1]
|
||||
movq mm2, [edi + SCREEN_WIDTH]
|
||||
movq mm3, [edi + SCREEN_WIDTH + 1]
|
||||
movq mm2, [edi + eax]
|
||||
movq mm3, [edi + eax + 1]
|
||||
pavgb mm0, mm1
|
||||
pavgb mm3, mm2
|
||||
pavgb mm0, mm3
|
||||
@@ -182,30 +203,30 @@ if SIMD eq SSE
|
||||
else if SIMD eq AVX
|
||||
.lop:
|
||||
vmovdqa xmm0, [edi]
|
||||
vmovdqu xmm1, [edi + SCREEN_WIDTH + 1]
|
||||
vpavgb xmm2, xmm0, [edi + 1]
|
||||
vpavgb xmm3, xmm1, [edi + SCREEN_WIDTH]
|
||||
vpavgb xmm4, xmm2, xmm3
|
||||
vmovdqu xmm1, [edi + eax + 1]
|
||||
vpavgb xmm2, xmm0, [edi + 1]
|
||||
vpavgb xmm3, xmm1, [edi + eax]
|
||||
vpavgb xmm4, xmm2, xmm3
|
||||
vmovdqa [edi], xmm4
|
||||
add edi, SIMD_BYTES
|
||||
loop .lop
|
||||
else if SIMD eq AVX2
|
||||
.lop:
|
||||
vmovdqa ymm0, [edi]
|
||||
vmovdqu ymm1, [edi + SCREEN_WIDTH + 1]
|
||||
vpavgb ymm2, ymm0, [edi + 1]
|
||||
vpavgb ymm3, ymm1, [edi + SCREEN_WIDTH]
|
||||
vpavgb ymm4, ymm2, ymm3
|
||||
vmovdqu ymm1, [edi + eax + 1]
|
||||
vpavgb ymm2, ymm0, [edi + 1]
|
||||
vpavgb ymm3, ymm1, [edi + eax]
|
||||
vpavgb ymm4, ymm2, ymm3
|
||||
vmovdqa [edi], ymm4
|
||||
add edi, SIMD_BYTES
|
||||
loop .lop
|
||||
else if SIMD eq AVX512
|
||||
.lop:
|
||||
vmovdqa64 zmm0, [edi]
|
||||
vmovdqu64 zmm1, [edi + SCREEN_WIDTH + 1]
|
||||
vmovdqu64 zmm1, [edi + eax + 1]
|
||||
vpavgb zmm2, zmm0, [edi + 1]
|
||||
vpavgb zmm3, zmm1, [edi + SCREEN_WIDTH]
|
||||
vpavgb zmm4, zmm2, zmm3
|
||||
vpavgb zmm3, zmm1, [edi + eax]
|
||||
vpavgb zmm4, zmm2, zmm3
|
||||
vmovdqa64 [edi], zmm4
|
||||
add edi, SIMD_BYTES
|
||||
loop .lop
|
||||
@@ -217,12 +238,12 @@ STARTAPP:
|
||||
init_palette:
|
||||
mov edi, pal
|
||||
xor eax, eax
|
||||
red_loop:
|
||||
@@:
|
||||
stosd
|
||||
stosd
|
||||
add eax, 0x040000
|
||||
and eax, 0xFFFFFF
|
||||
jnz red_loop
|
||||
jnz @b
|
||||
|
||||
mov eax, 63*4 SHL 16
|
||||
@@:
|
||||
@@ -231,11 +252,12 @@ red_loop:
|
||||
add ax, 0x0404
|
||||
jnc @b
|
||||
|
||||
;zero_buffer:
|
||||
mov ecx, SCREEN_WIDTH * SCREEN_HEIGHT / 4
|
||||
; mov edi, buffer
|
||||
xor eax, eax
|
||||
rep stosd
|
||||
;init buffer
|
||||
mcall SF_SYS_MISC,SSF_HEAP_INIT
|
||||
mov ecx,[Screen_W]
|
||||
imul ecx,[Screen_H]
|
||||
mcall SF_SYS_MISC,SSF_MEM_ALLOC
|
||||
mov [buffer],eax
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
; Main Functions
|
||||
@@ -253,30 +275,63 @@ end virtual
|
||||
|
||||
jmp MAIN
|
||||
|
||||
align 4
|
||||
OnResize:
|
||||
mov ecx,[Screen_W]
|
||||
imul ecx,[Screen_H]
|
||||
;ecx = SCREEN_W*SCREEN_H
|
||||
mcall SF_SYS_MISC,SSF_MEM_REALLOC,,[buffer]
|
||||
ret
|
||||
|
||||
align 4
|
||||
red:
|
||||
mcall 9, proc_info, -1
|
||||
x = 100
|
||||
y = 70
|
||||
xsize = SCREEN_WIDTH+9
|
||||
ysize = SCREEN_HEIGHT+4
|
||||
areacolor = 0x54224466
|
||||
mov eax, 12 ; function 12:tell os about windowdraw
|
||||
mov ebx, 1 ; 1, start of draw
|
||||
int 0x40
|
||||
mov eax, 48
|
||||
mov ebx, 4
|
||||
int 0x40
|
||||
lea ecx, [(y SHL 16) + ysize + eax]
|
||||
xor eax, eax ; function 0 : define and draw window
|
||||
mov ebx, (x SHL 16) + xsize ; [x start] *65536 + [x size]
|
||||
mov edx, areacolor ; color of work area RRGGBB
|
||||
mov edi, window_title
|
||||
int 0x40
|
||||
mov eax, 12 ; end of redraw
|
||||
mov ebx, 2
|
||||
int 0x40
|
||||
mcall SF_THREAD_INFO, proc_info, -1
|
||||
areacolor = 0x53224466
|
||||
mcall SF_REDRAW, SSF_BEGIN_DRAW
|
||||
mcall SF_STYLE_SETTINGS, SSF_GET_SKIN_HEIGHT
|
||||
add eax, 4
|
||||
push eax ;for test resize
|
||||
add eax, [Screen_H]
|
||||
lea ecx, [(70 shl 16) + eax]
|
||||
mov ebx, [Screen_W]
|
||||
lea ebx, [(100 shl 16) + 9 + ebx]
|
||||
mcall SF_CREATE_WINDOW,,, areacolor,, window_title
|
||||
|
||||
;test resize
|
||||
pop eax
|
||||
cmp dword[proc_info.box.height],0
|
||||
je .resize_end
|
||||
sub eax,[proc_info.box.height]
|
||||
neg eax
|
||||
cmp eax,[Screen_H]
|
||||
je .end_h
|
||||
cmp eax,32 ;min height
|
||||
jge @f
|
||||
mov eax,32
|
||||
@@:
|
||||
mov [Screen_H],eax
|
||||
xor eax,eax
|
||||
mov [Screen_W],eax
|
||||
.end_h:
|
||||
|
||||
mov eax,[proc_info.box.width]
|
||||
sub eax,9
|
||||
mov [lost_bytes],eax
|
||||
and eax,0xffff-(SIMD_BYTES-1)
|
||||
cmp eax,[Screen_W]
|
||||
je .resize_end
|
||||
cmp eax,64 ;min width
|
||||
jge @f
|
||||
mov eax,64
|
||||
@@:
|
||||
mov [Screen_W],eax
|
||||
|
||||
call OnResize
|
||||
.resize_end:
|
||||
|
||||
mcall SF_REDRAW, SSF_END_DRAW ; end of redraw
|
||||
|
||||
align 4
|
||||
MAIN:
|
||||
test [proc_info.wnd_state], 0x04
|
||||
jnz still
|
||||
@@ -291,11 +346,15 @@ MAIN:
|
||||
|
||||
cmp eax, 5
|
||||
jb .new_particle
|
||||
cmp eax, SCREEN_WIDTH - 5
|
||||
mov edx, [Screen_W]
|
||||
sub edx, 5
|
||||
cmp eax, edx
|
||||
jge .new_particle
|
||||
cmp ebx, 5
|
||||
jb .new_particle
|
||||
cmp ebx, SCREEN_HEIGHT - 5
|
||||
mov edx, [Screen_H]
|
||||
sub edx, 5
|
||||
cmp ebx, edx
|
||||
jl .part_ok
|
||||
|
||||
.new_particle:
|
||||
@@ -303,9 +362,11 @@ MAIN:
|
||||
jmp .advance_particles
|
||||
|
||||
.part_ok:
|
||||
imul edi, ebx, SCREEN_WIDTH
|
||||
mov edi, ebx
|
||||
imul edi, [Screen_W]
|
||||
mov dl, [ebp+COLOR_OFFSET]
|
||||
mov [buffer+eax+edi], dl
|
||||
add eax,[buffer]
|
||||
mov [eax+edi], dl
|
||||
|
||||
mov eax, [ebp+X_SPEED_OFFSET]
|
||||
add [ebp+X_OFFSET], eax
|
||||
@@ -324,6 +385,7 @@ MAIN:
|
||||
shade
|
||||
; jmp .copy_buffer_to_video
|
||||
blur_prepare
|
||||
mov eax, [Screen_W]
|
||||
test dword [blur_right_flag] , 0x800000
|
||||
jnz .do_blur_right
|
||||
blur
|
||||
@@ -339,36 +401,45 @@ MAIN:
|
||||
|
||||
.copy_buffer_to_video:
|
||||
|
||||
mcall 48, 4
|
||||
lea edx, [(5 SHL 16) + eax]
|
||||
|
||||
mov eax, 65
|
||||
mov ebx, buffer
|
||||
mov ecx, (SCREEN_WIDTH SHL 16) + SCREEN_HEIGHT
|
||||
push 8
|
||||
pop esi
|
||||
mov edi, pal
|
||||
xor ebp, ebp
|
||||
int 0x40
|
||||
mcall SF_STYLE_SETTINGS, SSF_GET_SKIN_HEIGHT
|
||||
lea edx, [(5 shl 16) + eax]
|
||||
push 8
|
||||
pop esi
|
||||
xor ebp, ebp
|
||||
mov ecx, [Screen_W]
|
||||
shl ecx, 16
|
||||
add ecx, [Screen_H]
|
||||
mcall SF_PUT_IMAGE_EXT, [buffer],,,, pal
|
||||
|
||||
and [lost_bytes], SIMD_BYTES-1
|
||||
jz still
|
||||
mcall SF_STYLE_SETTINGS, SSF_GET_SKIN_HEIGHT
|
||||
mov ecx, eax
|
||||
shl ecx, 16
|
||||
add ecx, [Screen_H]
|
||||
mov ebx, [Screen_W]
|
||||
add ebx, 5 ;left border
|
||||
shl ebx, 16
|
||||
add ebx, [lost_bytes]
|
||||
xor edx, edx
|
||||
mcall SF_DRAW_RECT
|
||||
|
||||
align 4
|
||||
still:
|
||||
mov eax, 11 ; Test if there is an event in the queue.
|
||||
int 0x40
|
||||
mcall SF_WAIT_EVENT_TIMEOUT, 1
|
||||
|
||||
dec eax ; redraw request ?
|
||||
jz red
|
||||
dec eax ; key in buffer ?
|
||||
jz key
|
||||
dec eax ; button in buffer ?
|
||||
jz button
|
||||
|
||||
jmp MAIN
|
||||
dec eax ; redraw request ?
|
||||
jz red
|
||||
dec eax ; key in buffer ?
|
||||
jz key
|
||||
dec eax ; button in buffer ?
|
||||
jz button
|
||||
|
||||
jmp MAIN
|
||||
|
||||
align 4
|
||||
key:
|
||||
mov eax, 2
|
||||
int 0x40
|
||||
mcall SF_GET_KEY
|
||||
; cmp ah, 1 ; Test Esc in Scan
|
||||
; je close_app
|
||||
cmp ah, 27 ; Test Esc in ASCII
|
||||
@@ -378,8 +449,7 @@ key:
|
||||
button:
|
||||
; we have only one button, close
|
||||
close_app:
|
||||
mov eax, -1 ; close this program
|
||||
int 0x40
|
||||
mcall SF_TERMINATE_PROCESS
|
||||
|
||||
init_particle:
|
||||
rdtsc
|
||||
@@ -389,7 +459,7 @@ init_particle:
|
||||
call rand
|
||||
cdq
|
||||
;xor dx, dx
|
||||
mov ebx, SCREEN_WIDTH
|
||||
mov ebx, [Screen_W]
|
||||
div ebx
|
||||
shl edx, 6
|
||||
mov [4 + global_x], edx
|
||||
@@ -397,7 +467,7 @@ init_particle:
|
||||
call rand
|
||||
cdq
|
||||
;xor dx, dx
|
||||
mov ebx, SCREEN_HEIGHT
|
||||
mov ebx, [Screen_H]
|
||||
div ebx
|
||||
shl edx, 6
|
||||
mov [4 + global_y], edx
|
||||
@@ -444,7 +514,8 @@ proc_info process_information
|
||||
align 16
|
||||
pal rb 256 * 4
|
||||
align SIMD_BYTES
|
||||
buffer rb SCREEN_WIDTH * SCREEN_HEIGHT
|
||||
E_END:
|
||||
rd 0x200
|
||||
buffer dd 0
|
||||
align 4
|
||||
rd 1024
|
||||
stacktop:
|
||||
E_END:
|
@@ -1,5 +1,5 @@
|
||||
if tup.getconfig("NO_FASM") ~= "" then return end
|
||||
HELPERDIR = (tup.getconfig("HELPERDIR") == "") and "../../.." or tup.getconfig("HELPERDIR")
|
||||
HELPERDIR = (tup.getconfig("HELPERDIR") == "") and "../.." or tup.getconfig("HELPERDIR")
|
||||
tup.include(HELPERDIR .. "/use_fasm.lua")
|
||||
add_include(tup.getvariantdir())
|
||||
|
@@ -1,48 +1,104 @@
|
||||
; Originally written by Jarek Pelczar
|
||||
include "lang.inc"
|
||||
include "..\..\..\macros.inc"
|
||||
include "..\..\macros.inc"
|
||||
include "..\..\KOSfuncs.inc"
|
||||
|
||||
WND_SIZE_X = 320
|
||||
WND_SIZE_Y = 200
|
||||
KOS_APP_START
|
||||
|
||||
WND_SIZE_X dd 640
|
||||
WND_SIZE_Y dd 400
|
||||
|
||||
title db 'Plasma',0
|
||||
|
||||
MEOS_APP_START
|
||||
CODE
|
||||
mcall SF_SYS_MISC,SSF_HEAP_INIT
|
||||
call OnResize
|
||||
|
||||
fninit
|
||||
mcall 40,101b
|
||||
mcall SF_SET_EVENTS_MASK, 101b
|
||||
call init_palette
|
||||
call init_texture
|
||||
jmp .paint_window
|
||||
.event_loop:
|
||||
mcall 23,1
|
||||
mcall SF_WAIT_EVENT_TIMEOUT, 1
|
||||
test eax,eax
|
||||
je .draw_screen
|
||||
dec eax
|
||||
je .paint_window
|
||||
|
||||
or eax,-1
|
||||
mcall
|
||||
mcall SF_TERMINATE_PROCESS
|
||||
|
||||
.draw_screen:
|
||||
xor ebp,ebp
|
||||
mcall 65,virtual_screen_8,<WND_SIZE_X,WND_SIZE_Y>,0,8,_palette
|
||||
mov ecx,[WND_SIZE_X]
|
||||
shl ecx,16
|
||||
add ecx,[WND_SIZE_Y]
|
||||
mcall SF_PUT_IMAGE_EXT, [virtual_screen_8],,0,8,_palette
|
||||
call rotate_pal
|
||||
jmp .event_loop
|
||||
|
||||
.paint_window:
|
||||
mcall 12,1
|
||||
mcall SF_REDRAW, SSF_BEGIN_DRAW
|
||||
|
||||
mcall 48,4 ; get skin height
|
||||
lea ecx,[eax + (110 shl 16) + WND_SIZE_Y + 4]
|
||||
;if window resize
|
||||
mcall SF_THREAD_INFO,procinfo,-1
|
||||
cmp dword[procinfo.box.height],0
|
||||
je .resize_end
|
||||
mcall SF_STYLE_SETTINGS, SSF_GET_SKIN_HEIGHT
|
||||
add eax,4
|
||||
sub eax,[procinfo.box.height]
|
||||
neg eax
|
||||
cmp eax,[WND_SIZE_Y]
|
||||
je .end_h
|
||||
cmp eax,32 ;min height
|
||||
jge @f
|
||||
mov eax,32
|
||||
@@:
|
||||
mov [WND_SIZE_Y],eax
|
||||
xor eax,eax
|
||||
mov [WND_SIZE_X],eax
|
||||
.end_h:
|
||||
|
||||
mov eax,[procinfo.box.width]
|
||||
sub eax,9
|
||||
cmp eax,[WND_SIZE_X]
|
||||
je .resize_end
|
||||
cmp eax,64 ;min width
|
||||
jge @f
|
||||
mov eax,64
|
||||
@@:
|
||||
mov [WND_SIZE_X],eax
|
||||
|
||||
call OnResize
|
||||
call init_texture
|
||||
.resize_end:
|
||||
|
||||
mcall SF_STYLE_SETTINGS, SSF_GET_SKIN_HEIGHT
|
||||
lea ecx,[eax + (110 shl 16) + 4]
|
||||
add ecx,[WND_SIZE_Y]
|
||||
mov edi,title
|
||||
mcall 0,<110,WND_SIZE_X+9>,,0x74000000
|
||||
mov ebx,[WND_SIZE_X]
|
||||
add ebx,(110 shl 16)+9
|
||||
mcall SF_CREATE_WINDOW,,,0x73000000
|
||||
|
||||
xor ebp,ebp
|
||||
mcall 65,virtual_screen_8,<WND_SIZE_X,WND_SIZE_Y>,0,8,_palette
|
||||
xor ebp,ebp
|
||||
mov ecx,[WND_SIZE_X]
|
||||
shl ecx,16
|
||||
add ecx,[WND_SIZE_Y]
|
||||
mcall SF_PUT_IMAGE_EXT, [virtual_screen_8],,0,8,_palette
|
||||
|
||||
mcall 12,2
|
||||
mcall SF_REDRAW, SSF_END_DRAW
|
||||
|
||||
jmp .event_loop
|
||||
|
||||
align 4
|
||||
OnResize:
|
||||
mov ecx,[WND_SIZE_X]
|
||||
imul ecx,[WND_SIZE_Y]
|
||||
mcall SF_SYS_MISC,SSF_MEM_ALLOC,, [virtual_screen_8]
|
||||
mov [virtual_screen_8],eax
|
||||
ret
|
||||
|
||||
align 4
|
||||
init_palette:
|
||||
mov edi,_palette
|
||||
mov ecx,64
|
||||
@@ -92,7 +148,7 @@ init_texture:
|
||||
mov [_fpom16],180
|
||||
fidiv [_fpom16]
|
||||
fstp [_st_rad]
|
||||
mov edi,virtual_screen_8
|
||||
mov edi,[virtual_screen_8]
|
||||
cdq
|
||||
.itex_vertical:
|
||||
xor ecx,ecx
|
||||
@@ -120,10 +176,10 @@ init_texture:
|
||||
inc eax
|
||||
stosb
|
||||
inc ecx
|
||||
cmp ecx,WND_SIZE_X
|
||||
cmp ecx,[WND_SIZE_X]
|
||||
jne .itex_horizontal
|
||||
inc edx
|
||||
cmp edx,WND_SIZE_Y
|
||||
cmp edx,[WND_SIZE_Y]
|
||||
jne .itex_vertical
|
||||
ret
|
||||
|
||||
@@ -141,7 +197,6 @@ rotate_pal:
|
||||
DATA
|
||||
_multiplier dd 63.5
|
||||
|
||||
title db 'Plasma',0
|
||||
|
||||
UDATA
|
||||
_fpom32 rd 1
|
||||
@@ -149,7 +204,7 @@ UDATA
|
||||
_st_rad rd 1
|
||||
_palette: rd 256
|
||||
|
||||
virtual_screen_8:
|
||||
rb WND_SIZE_X*WND_SIZE_Y
|
||||
virtual_screen_8 rd 1
|
||||
procinfo process_information
|
||||
|
||||
MEOS_APP_END
|
||||
KOS_APP_END
|
@@ -1,5 +0,0 @@
|
||||
@erase lang.inc
|
||||
@echo lang fix en_US >lang.inc
|
||||
@fasm plasma.asm plasma
|
||||
@erase lang.inc
|
||||
@pause
|
@@ -1,5 +0,0 @@
|
||||
@erase lang.inc
|
||||
@echo lang fix ru_RU >lang.inc
|
||||
@fasm plasma.asm plasma
|
||||
@erase lang.inc
|
||||
@pause
|
4
programs/other/pipet/Tupfile.lua
Normal file
4
programs/other/pipet/Tupfile.lua
Normal file
@@ -0,0 +1,4 @@
|
||||
if tup.getconfig("NO_FASM") ~= "" then return end
|
||||
HELPERDIR = (tup.getconfig("HELPERDIR") == "") and "../.." or tup.getconfig("HELPERDIR")
|
||||
tup.include(HELPERDIR .. "/use_fasm.lua")
|
||||
tup.rule("pipet.asm", FASM .. " -dlang=" .. tup.getconfig("LANG") .. " %f %o" .. tup.getconfig("KPACK_CMD"), "%B")
|
547
programs/other/pipet/pipet.asm
Normal file
547
programs/other/pipet/pipet.asm
Normal file
@@ -0,0 +1,547 @@
|
||||
; SPDX-License-Identifier: GPL-2.0-only
|
||||
; SPDX-FileCopyrightText: 2025 KolibriOS Team
|
||||
; FileContributor: Pipet 1.0 in C-- by Leency
|
||||
; FileContributor: Pipet 2.0 in FASM by Burer
|
||||
|
||||
;---------------------------------------------------------------------
|
||||
|
||||
use32
|
||||
org 0
|
||||
|
||||
db 'MENUET01'
|
||||
dd 1
|
||||
dd START
|
||||
dd I_END
|
||||
dd MEM
|
||||
dd STACKTOP
|
||||
dd 0
|
||||
dd 0
|
||||
|
||||
include "../../macros.inc"
|
||||
include "../../KOSfuncs.inc"
|
||||
|
||||
;---------------------------------------------------------------------
|
||||
|
||||
START:
|
||||
|
||||
mcall SF_SET_EVENTS_MASK, 0x00000027
|
||||
mcall SF_SYSTEM, SSF_WINDOW_BEHAVIOR, SSSF_SET_WB, -1, 1
|
||||
mcall SF_KEYBOARD, SSF_SET_INPUT_MODE, 1
|
||||
|
||||
mcall SF_SYS_MISC, SSF_HEAP_INIT
|
||||
|
||||
; initializing 7*7 rect of pixels from screen
|
||||
mcall SF_SYS_MISC, SSF_MEM_ALLOC, 7*7*3
|
||||
mov [sel_rect], eax
|
||||
|
||||
; loading and converting pipet icon from ICONS18W
|
||||
mcall SF_SYS_MISC, , 18*18*4
|
||||
mov [pip_icon], eax
|
||||
|
||||
mcall SF_SYS_MISC, SSF_MEM_OPEN, win_icons_name, , 0
|
||||
add eax, 39*18*18*4
|
||||
mov [win_icons], eax
|
||||
|
||||
mov esi, eax
|
||||
mov edi, [pip_icon]
|
||||
mov ecx, 18*18
|
||||
|
||||
cld
|
||||
rep movsd
|
||||
|
||||
call get_pixels
|
||||
|
||||
;---------------------------------------------------------------------
|
||||
|
||||
still:
|
||||
|
||||
mcall SF_WAIT_EVENT
|
||||
|
||||
cmp eax, 1
|
||||
je redraw
|
||||
cmp eax, 2
|
||||
je key
|
||||
cmp eax, 3
|
||||
je button
|
||||
cmp eax, 6
|
||||
je mouse
|
||||
|
||||
jmp still
|
||||
|
||||
;---------------------------------------------------------------------
|
||||
|
||||
redraw:
|
||||
call draw_window
|
||||
|
||||
key:
|
||||
mcall SF_GET_KEY
|
||||
|
||||
cmp ah, 1
|
||||
je button.exit
|
||||
cmp ah, 25
|
||||
je make_pick_active
|
||||
cmp ah, 19
|
||||
je copy_col_rgb
|
||||
cmp ah, 46
|
||||
je copy_col_hex
|
||||
jmp still
|
||||
|
||||
button:
|
||||
mcall SF_GET_BUTTON
|
||||
|
||||
cmp ah, 11
|
||||
je make_pick_active
|
||||
cmp ah, 12
|
||||
je copy_col_hex ; copy HEX color
|
||||
cmp ah, 13
|
||||
je copy_col_rgb ; copy RGB color
|
||||
cmp ah, 14
|
||||
je pick_col_cell ; make pick active again
|
||||
cmp ah, 1
|
||||
jne still
|
||||
|
||||
.exit:
|
||||
mcall SF_TERMINATE_PROCESS
|
||||
|
||||
mouse:
|
||||
mcall SF_MOUSE_GET, SSF_BUTTON
|
||||
test ax, 0x0001
|
||||
jz .move
|
||||
|
||||
mov [pick_act], 0x00 ; left mouse button click
|
||||
|
||||
.move:
|
||||
cmp [pick_act], 0x00
|
||||
je still
|
||||
|
||||
call get_pixels
|
||||
call draw_update
|
||||
|
||||
jmp still
|
||||
|
||||
;---------------------------------------------------------------------
|
||||
|
||||
; window redraw function
|
||||
draw_window:
|
||||
|
||||
mcall SF_REDRAW, SSF_BEGIN_DRAW
|
||||
|
||||
mcall SF_STYLE_SETTINGS, SSF_GET_COLORS, win_cols, sizeof.system_colors
|
||||
mcall , SSF_GET_SKIN_HEIGHT,
|
||||
|
||||
mov ecx, eax
|
||||
add ecx, WIN_Y * 65536 + WIN_H
|
||||
|
||||
mov edx, [win_cols.work]
|
||||
add edx, 0x34000000
|
||||
mcall SF_CREATE_WINDOW, <WIN_X, WIN_W>, , , , header
|
||||
|
||||
; icon background color conversion
|
||||
mov esi, [pip_icon]
|
||||
mov ecx, 18*18
|
||||
|
||||
.icon_loop:
|
||||
mov eax, [esi]
|
||||
cmp eax, [win_cols.work]
|
||||
jne .skip_change
|
||||
mov ebx, [win_cols.work_light]
|
||||
mov [esi], ebx
|
||||
.skip_change:
|
||||
add esi, 4
|
||||
loop .icon_loop
|
||||
|
||||
call draw_base
|
||||
call draw_update
|
||||
|
||||
mcall SF_REDRAW, SSF_END_DRAW
|
||||
|
||||
ret
|
||||
|
||||
;---------------------------------------------------------------------
|
||||
|
||||
; draw basic elements of window
|
||||
draw_base:
|
||||
|
||||
mcall SF_DRAW_RECT, <BUT_PIP_X, BUT_PIP_H>, <BUT_PIP_Y, BUT_PIP_H>, [win_cols.work_graph]
|
||||
mcall , <BUT_COL_X, BUT_COL_W>, ,
|
||||
mcall , <BUT_HEX_X, BUT_HEX_W>, <BUT_HEX_Y, BUT_HEX_H>,
|
||||
mcall , , <BUT_RGB_Y, BUT_HEX_H>,
|
||||
mcall , <BUT_REC_X, BUT_REC_W>, <BUT_REC_Y, BUT_REC_H>,
|
||||
|
||||
mcall , <BUT_PIP_X, BUT_PIP_H - 1>, <BUT_PIP_Y, BUT_PIP_H - 1>, [win_cols.work_dark]
|
||||
mcall , <BUT_COL_X, BUT_COL_W - 1>, ,
|
||||
mcall , <BUT_HEX_X, BUT_HEX_W - 1>, <BUT_HEX_Y, BUT_HEX_H - 1>,
|
||||
mcall , , <BUT_RGB_Y, BUT_HEX_H - 1>,
|
||||
mcall , <BUT_REC_X, BUT_REC_W - 1>, <BUT_REC_Y, BUT_REC_H - 1>,
|
||||
|
||||
mcall , <BUT_PIP_X + 1, BUT_PIP_H - 2>, <BUT_PIP_Y + 1, BUT_PIP_H - 2>, [win_cols.work_light]
|
||||
mcall , <BUT_COL_X + 1, BUT_COL_W - 2>, , [win_cols.work_button_text]
|
||||
mcall , <BUT_HEX_X + 1, BUT_HEX_W - 2>, <BUT_HEX_Y + 1, BUT_HEX_H - 2>,
|
||||
mcall , , <BUT_RGB_Y + 1, BUT_HEX_H - 2>,
|
||||
mcall , <BUT_REC_X + 1, BUT_REC_W - 2>, <BUT_REC_Y + 1, BUT_REC_H - 2>,
|
||||
|
||||
; buttons 11, 12, 13 and 14
|
||||
mcall SF_DEFINE_BUTTON, <BUT_PIP_X + 1, BUT_PIP_W - 3>, <BUT_PIP_Y + 1, BUT_PIP_H - 3>, 0x4000000B
|
||||
mcall , <BUT_HEX_X + 1, BUT_HEX_W - 3>, <BUT_HEX_Y + 1, BUT_HEX_H - 3>, 0x4000000C
|
||||
mcall , , <BUT_RGB_Y + 1, BUT_HEX_H - 3>, 0x4000000D
|
||||
mcall , <BUT_REC_X + 2, BUT_REC_W - 4>, <BUT_REC_Y + 2, BUT_REC_H - 4>, 0x6000000E
|
||||
|
||||
; 18*18 pixels icon
|
||||
mcall SF_PUT_IMAGE_EXT, [pip_icon], 0x00120012, 0x000B000F, 32
|
||||
|
||||
ret
|
||||
|
||||
|
||||
; drawing text on buttons and colorful rect
|
||||
draw_update:
|
||||
|
||||
; current color rect
|
||||
mcall SF_DRAW_RECT, <BUT_COL_X + 2, BUT_COL_W - 4>, <BUT_COL_Y + 2, BUT_COL_H - 4>, [sel_color]
|
||||
|
||||
; color codes
|
||||
mcall , <BUT_RGB_X + 1, BUT_HEX_W - 2>, <BUT_RGB_Y + 1, BUT_HEX_H - 2>, [win_cols.work_button_text]
|
||||
|
||||
mcall SF_DRAW_NUMBER, 0x00060100, [sel_color], <BUT_HEX_X + 26, BUT_HEX_Y + 5>, 0x50000000, [win_cols.work_button_text]
|
||||
|
||||
mov ebx, 0x00030000
|
||||
xor ecx, ecx
|
||||
mov edx, 65536 * 78 + 81
|
||||
xor edi, edi
|
||||
|
||||
dr_loop:
|
||||
mov cl, byte [sel_color + edi]
|
||||
mov esi, [rgb_cols + edi * 4]
|
||||
or esi, 0x10000000
|
||||
mcall , , , , ,
|
||||
sub edx, 0x00200000
|
||||
inc edi
|
||||
cmp edi, 3
|
||||
jb dr_loop
|
||||
|
||||
; 7*7 pixels grid
|
||||
mov eax, SF_DRAW_RECT
|
||||
mov ebx, 118 * 65536 + 12
|
||||
mov ecx, 14 * 65536 + 12
|
||||
mov esi, [sel_rect]
|
||||
mov edi, 49
|
||||
|
||||
.du_loop_rect:
|
||||
mcall , , , dword [esi]
|
||||
add ebx, 12 * 65536
|
||||
cmp ebx, 196 * 65536
|
||||
jle .du_loop_rect_row
|
||||
mov ebx, 118 * 65536 + 12
|
||||
add ecx, 12 * 65536
|
||||
.du_loop_rect_row:
|
||||
add esi, 3
|
||||
dec edi
|
||||
cmp edi, 0
|
||||
jne .du_loop_rect
|
||||
|
||||
; selection of one pixel from 7*7 grid
|
||||
mov cl, [cell_act_y]
|
||||
mov al, 12
|
||||
mul cl
|
||||
add ax, 14
|
||||
shl eax, 16
|
||||
mov ax, 12
|
||||
mov ecx, eax
|
||||
|
||||
mov bl, [cell_act_x]
|
||||
mov al, 12
|
||||
mul bl
|
||||
add ax, 118
|
||||
shl eax, 16
|
||||
mov ax, 12
|
||||
mov ebx, eax
|
||||
|
||||
mcall SF_DRAW_RECT, , , 0x00FF0000
|
||||
add ebx, 2 * 65536 - 4
|
||||
add ecx, 2 * 65536 - 4
|
||||
mcall , , , [sel_color]
|
||||
|
||||
ret
|
||||
|
||||
;---------------------------------------------------------------------
|
||||
|
||||
; making pipet active again
|
||||
make_pick_active:
|
||||
|
||||
mov [pick_act], 0x01
|
||||
mov [cell_act_x], 0x03
|
||||
mov [cell_act_y], 0x03
|
||||
|
||||
|
||||
mcall SF_DRAW_RECT, <BUT_REC_X + 1, BUT_REC_W - 2>, <BUT_REC_Y + 1, BUT_REC_H - 2>, [win_cols.work_button_text]
|
||||
mcall SF_DRAW_TEXT, <BUT_REC_X + 28, BUT_REC_Y + 37>, 0x10000000, mes_pick, 4
|
||||
|
||||
mcall SF_SLEEP, 50
|
||||
|
||||
mcall SF_DRAW_RECT, <BUT_PIP_X + 1, BUT_PIP_W - 2>, <BUT_PIP_Y + 1, BUT_PIP_H - 2>, [win_cols.work_light]
|
||||
mcall SF_PUT_IMAGE_EXT, [pip_icon], 0x00120012, 0x000B000F, 32
|
||||
|
||||
call draw_update
|
||||
jmp still
|
||||
|
||||
|
||||
; read array of pixels from screen by mouse coords
|
||||
get_pixels:
|
||||
|
||||
mcall SF_MOUSE_GET, SSF_SCREEN_POSITION
|
||||
mov edx, eax
|
||||
|
||||
mcall SF_GET_SCREEN_SIZE
|
||||
mov ebx, eax
|
||||
|
||||
; clamping mouse coords to stay within the screen
|
||||
call clamp_pixels
|
||||
|
||||
mcall SF_GET_IMAGE, sel_color, <1, 1>,
|
||||
|
||||
sub edx, 0x00030003
|
||||
mcall SF_GET_IMAGE, [sel_rect], <7, 7>,
|
||||
|
||||
ret
|
||||
|
||||
|
||||
; clamping mouse coords to stay within the screen
|
||||
clamp_pixels:
|
||||
|
||||
mov eax, edx
|
||||
shr eax, 16
|
||||
mov cx, ax
|
||||
mov ax, dx
|
||||
|
||||
push ax
|
||||
push cx
|
||||
mov ax, bx
|
||||
mov di, ax
|
||||
mov eax, ebx
|
||||
shr eax, 16
|
||||
mov si, ax
|
||||
|
||||
pop cx
|
||||
pop ax
|
||||
|
||||
.check_min_x:
|
||||
cmp cx, 3
|
||||
jge .check_min_y
|
||||
mov cx, 3
|
||||
.check_min_y:
|
||||
cmp ax, 3
|
||||
jge .check_max_x
|
||||
mov ax, 3
|
||||
.check_max_x:
|
||||
mov dx, si
|
||||
sub dx, 3
|
||||
cmp cx, dx
|
||||
jle .check_max_y
|
||||
mov cx, dx
|
||||
.check_max_y:
|
||||
mov dx, di
|
||||
sub dx, 3
|
||||
cmp ax, dx
|
||||
jle .combine_coords
|
||||
mov ax, dx
|
||||
|
||||
.combine_coords:
|
||||
xor edx, edx
|
||||
mov dx, cx
|
||||
rol edx, 16
|
||||
mov dx, ax
|
||||
|
||||
ret
|
||||
|
||||
|
||||
; copy color HEX code
|
||||
copy_col_hex:
|
||||
|
||||
mcall SF_DRAW_RECT, <BUT_HEX_X + 2, BUT_HEX_W - 4>, <BUT_HEX_Y + 2, BUT_HEX_H - 4>, [win_cols.work_button_text]
|
||||
|
||||
mov ebx, [sel_color]
|
||||
mov ecx, 6
|
||||
|
||||
ch_loop: ; iterate over all hex-digits of color
|
||||
mov al, bl
|
||||
and al, 0x0F
|
||||
add al, 0x30
|
||||
cmp al, 0x39
|
||||
jbe ch_loop.cont ; if digit
|
||||
|
||||
add al, 0x07 ; if letter
|
||||
|
||||
.cont:
|
||||
mov [color_hex + 11 + ecx], byte al
|
||||
shr ebx, 4
|
||||
loop ch_loop
|
||||
|
||||
mcall SF_CLIPBOARD, 2, color_hex.end - color_hex, color_hex
|
||||
mcall SF_DRAW_TEXT, <BUT_HEX_X + 1, BUT_HEX_Y + 5>, 0x10000000, mes_copy, 12
|
||||
mcall SF_SLEEP, 50
|
||||
|
||||
mcall SF_DRAW_RECT, <BUT_HEX_X + 1, BUT_HEX_W - 2>, <BUT_HEX_Y + 1, BUT_HEX_H - 2>, [win_cols.work_button_text]
|
||||
|
||||
call draw_update
|
||||
jmp still
|
||||
|
||||
|
||||
; copy color RGB code
|
||||
copy_col_rgb:
|
||||
|
||||
mcall SF_DRAW_RECT, <BUT_HEX_X + 2, BUT_HEX_W - 4>, <BUT_RGB_Y + 2, BUT_HEX_H - 4>, [win_cols.work_button_text]
|
||||
|
||||
mov bl, 10
|
||||
mov edx, [sel_color]
|
||||
mov esi, 19
|
||||
mov edi, 3
|
||||
|
||||
cr_loop:
|
||||
|
||||
mov al, dl
|
||||
mov ecx, 3
|
||||
|
||||
.cr_loop_in:
|
||||
|
||||
and eax, 0x000000FF
|
||||
div bl
|
||||
add ah, 0x30
|
||||
mov [color_rgb + esi + ecx], byte ah
|
||||
|
||||
loop cr_loop.cr_loop_in
|
||||
|
||||
shr edx, 8
|
||||
sub esi, 4
|
||||
dec edi
|
||||
cmp edi, 0
|
||||
jg cr_loop
|
||||
|
||||
|
||||
mcall SF_CLIPBOARD, 2, color_rgb.end - color_rgb, color_rgb
|
||||
mcall SF_DRAW_TEXT, <BUT_HEX_X + 1, BUT_RGB_Y + 5>, 0x10000000, mes_copy, 12
|
||||
mcall SF_SLEEP, 50
|
||||
|
||||
mcall SF_DRAW_RECT, <BUT_HEX_X + 1, BUT_HEX_W - 2>, <BUT_RGB_Y + 1, BUT_HEX_H - 2>, [win_cols.work_button_text]
|
||||
|
||||
call draw_update
|
||||
jmp still
|
||||
|
||||
|
||||
; picking one color cell from 7*7 grid
|
||||
pick_col_cell:
|
||||
|
||||
mcall SF_MOUSE_GET, 1
|
||||
|
||||
push eax
|
||||
sub ax, 14
|
||||
mov bl, 12
|
||||
div bl
|
||||
mov [cell_act_y], al
|
||||
|
||||
pop eax
|
||||
shr eax, 16
|
||||
sub ax, 118
|
||||
div bl
|
||||
mov [cell_act_x], al
|
||||
|
||||
xor ebx, ebx
|
||||
mov bl, [cell_act_y]
|
||||
mov al, 7
|
||||
mul bl
|
||||
add al, [cell_act_x]
|
||||
mov bx, 3
|
||||
mul bx
|
||||
add eax, [sel_rect]
|
||||
|
||||
mov ebx, dword [eax]
|
||||
and ebx, 0x00FFFFFF
|
||||
mov [sel_color], ebx
|
||||
|
||||
call draw_update
|
||||
jmp still
|
||||
|
||||
;---------------------------------------------------------------------
|
||||
|
||||
WIN_X = 100
|
||||
WIN_W = 221
|
||||
WIN_Y = 100
|
||||
WIN_H = 112
|
||||
|
||||
BUT_PIP_X = 8
|
||||
BUT_PIP_W = 24
|
||||
BUT_PIP_Y = 12
|
||||
BUT_PIP_H = 24
|
||||
|
||||
BUT_COL_X = 40
|
||||
BUT_COL_W = 68
|
||||
BUT_COL_Y = 12
|
||||
BUT_COL_H = 24
|
||||
|
||||
|
||||
BUT_HEX_X = 8
|
||||
BUT_HEX_W = 100
|
||||
BUT_HEX_Y = 44
|
||||
BUT_HEX_H = 24
|
||||
|
||||
BUT_RGB_X = 8
|
||||
BUT_RGB_Y = 76
|
||||
|
||||
BUT_REC_X = 116
|
||||
BUT_REC_W = 88
|
||||
BUT_REC_Y = 12
|
||||
BUT_REC_H = 88
|
||||
|
||||
;---------------------------------------------------------------------
|
||||
|
||||
win_cols system_colors
|
||||
win_icons_name db 'ICONS18W', 0
|
||||
win_icons dd 0x00000000
|
||||
pip_icon dd 0x00000000
|
||||
|
||||
if lang eq ru_RU
|
||||
header db '<27><><EFBFBD><EFBFBD>⪠', 0
|
||||
else if lang eq es_ES
|
||||
header db 'Pipeta', 0
|
||||
else
|
||||
header db 'Pipet', 0
|
||||
endf
|
||||
|
||||
mes_copy db ' Copied '
|
||||
mes_pick db 'Pick'
|
||||
|
||||
rgb_cols:
|
||||
dd 0x000000FF
|
||||
dd 0x00008000
|
||||
dd 0x00FF0000
|
||||
|
||||
pick_act db 0x01
|
||||
cell_act_x db 0x03
|
||||
cell_act_y db 0x03
|
||||
|
||||
sel_rect dd 0x00000000
|
||||
sel_color:
|
||||
db 0xCF
|
||||
db 0xD7
|
||||
db 0xDD
|
||||
db 0x00
|
||||
|
||||
color_hex:
|
||||
dd color_hex.end - color_hex
|
||||
dd 0
|
||||
dd 1
|
||||
db '000000'
|
||||
.end:
|
||||
|
||||
color_rgb:
|
||||
dd color_rgb.end - color_rgb
|
||||
dd 0
|
||||
dd 1
|
||||
db '000,000,000'
|
||||
.end:
|
||||
|
||||
;---------------------------------------------------------------------
|
||||
|
||||
I_END:
|
||||
rb 0
|
||||
align 1024
|
||||
STACKTOP:
|
||||
MEM:
|
@@ -2,7 +2,6 @@
|
||||
; DBGBOARD - a console-based debug board
|
||||
; Copyright (C) 2025 KolibriOS team
|
||||
|
||||
|
||||
format binary as ""
|
||||
use32
|
||||
org 0
|
||||
@@ -55,6 +54,7 @@ struct RING_BUFFER
|
||||
pos dd ?
|
||||
bytes_filled dd ?
|
||||
ends
|
||||
assert sizeof.RING_BUFFER = 16 ; for BSF
|
||||
|
||||
proc set_text_color stdcall uses eax ecx edx, _color
|
||||
and [_color], 0x0F
|
||||
@@ -154,7 +154,7 @@ proc print_ring_buffer stdcall uses eax ebx ecx edx esi, _rb
|
||||
add eax, edx
|
||||
mov eax, [eax]
|
||||
mov byte [chr], al
|
||||
stdcall print_next_char, chr
|
||||
stdcall print_next_char
|
||||
inc ecx
|
||||
.endw
|
||||
ret
|
||||
@@ -231,7 +231,7 @@ proc print_next_char uses ebx
|
||||
stdcall set_text_color, TEXT_COLOR_LIGHTGRAY
|
||||
mov [is_kernel_printing], 0
|
||||
.endif
|
||||
.if [is_kernel_printing]
|
||||
.if [is_kernel_printing] = 1
|
||||
.if [current_mode] = MODE_KERNEL | [current_mode] = MODE_BOTH
|
||||
invoke con_write_asciiz, prefix
|
||||
.endif
|
||||
@@ -248,7 +248,7 @@ proc print_next_char uses ebx
|
||||
inc [prefix_index]
|
||||
.endif
|
||||
.else
|
||||
.if [is_kernel_printing]
|
||||
.if [is_kernel_printing] = 1
|
||||
.if [current_mode] = MODE_KERNEL | [current_mode] = MODE_BOTH
|
||||
invoke con_write_asciiz, chr
|
||||
.endif
|
||||
@@ -317,7 +317,7 @@ start:
|
||||
xor eax, eax
|
||||
.endif
|
||||
mov [current_mode], eax
|
||||
shl eax, BSF sizeof.RING_BUFFER ; assert on sizeof, must be power of two
|
||||
shl eax, BSF sizeof.RING_BUFFER
|
||||
add eax, rb_base
|
||||
mov [current_rb], eax
|
||||
mov eax, [current_mode]
|
||||
@@ -331,7 +331,7 @@ start:
|
||||
mov dword [prefix], 0
|
||||
mov [prefix_index], 0
|
||||
mov [is_start_line], 1
|
||||
mov [is_kernel_printing], 0 ;;
|
||||
mov [is_kernel_printing], 0
|
||||
stdcall print_ring_buffer, [current_rb]
|
||||
.endif
|
||||
.endif
|
||||
|
Reference in New Issue
Block a user