2006-01-03 10:43:31 +01:00
|
|
|
|
;
|
|
|
|
|
; Crown_s Soft Screensaver v1.13m
|
|
|
|
|
; WWW: http://www.crown-s-soft.com
|
|
|
|
|
;
|
|
|
|
|
; You may add you own figures. See file FIGURES.INC
|
|
|
|
|
;
|
|
|
|
|
; Compile with FASM v1.48 for Menuet or hier (FASM v1.40 contains bug)
|
|
|
|
|
;
|
|
|
|
|
; Copyright(c) 2002-2004 Crown_s Soft. All rights reserved.
|
|
|
|
|
;
|
|
|
|
|
|
|
|
|
|
fullscreen = 1
|
|
|
|
|
n_points = 0x1800
|
|
|
|
|
delay = 2
|
2021-12-20 23:36:51 +01:00
|
|
|
|
const480 = 480
|
2006-01-03 10:43:31 +01:00
|
|
|
|
speed equ 0.004
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
macro align value { rb (value-1) - ($ + value-1) mod value }
|
|
|
|
|
|
|
|
|
|
use32
|
|
|
|
|
org 0x0
|
|
|
|
|
db 'MENUET01' ; 8 byte id
|
|
|
|
|
dd 0x01 ; header version
|
|
|
|
|
dd start ; start of code
|
|
|
|
|
dd i_end ; size of image
|
|
|
|
|
dd i_end+0x1000 ; memory for app
|
|
|
|
|
dd i_end+0x1000 ; esp
|
2021-12-20 23:36:51 +01:00
|
|
|
|
dd params ; I_Param
|
2006-01-03 10:43:31 +01:00
|
|
|
|
dd 0x0 ; I_Icon
|
|
|
|
|
|
2021-12-20 23:36:51 +01:00
|
|
|
|
copyright db 'Crown_s Soft(c) Screensaver - www.crown-s-soft.com',0
|
2006-01-03 10:43:31 +01:00
|
|
|
|
copyrightlen:
|
|
|
|
|
|
|
|
|
|
include "lang.inc"
|
|
|
|
|
include "figuresi.inc"
|
2007-05-10 15:48:35 +02:00
|
|
|
|
include "..\..\..\macros.inc"
|
2006-01-03 10:43:31 +01:00
|
|
|
|
start:
|
2021-12-20 23:36:51 +01:00
|
|
|
|
cmp dword[params], '@ss'
|
|
|
|
|
setz [screensaver]
|
|
|
|
|
mov ebx, EVM_REDRAW + EVM_KEY
|
|
|
|
|
cmovz ebx, EVM_REDRAW + EVM_KEY + EVM_MOUSE
|
|
|
|
|
mcall 40
|
|
|
|
|
|
|
|
|
|
cmp [flscr],0
|
|
|
|
|
jz @f
|
|
|
|
|
mov edi, transparent_cursor
|
|
|
|
|
xor eax, eax
|
|
|
|
|
mov ecx, 32*32
|
|
|
|
|
rep stosd
|
|
|
|
|
mcall 37, 4, transparent_cursor, 2
|
|
|
|
|
mov ecx, eax
|
|
|
|
|
mcall 37, 5
|
|
|
|
|
@@:
|
2006-01-03 10:43:31 +01:00
|
|
|
|
cld
|
|
|
|
|
finit
|
|
|
|
|
call filling_alfbet ; fill table alfbet by casual numbers
|
|
|
|
|
|
|
|
|
|
mov eax,[tabl_calls]
|
|
|
|
|
mov [pp1adr],eax
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
cmp [flscr],0
|
|
|
|
|
jz nofullscreen
|
|
|
|
|
mov eax,14
|
2007-05-10 15:48:35 +02:00
|
|
|
|
mcall
|
2006-01-03 10:43:31 +01:00
|
|
|
|
|
|
|
|
|
mov [maxy],ax
|
2021-12-20 23:36:51 +01:00
|
|
|
|
sub ax,const480
|
2006-01-03 10:43:31 +01:00
|
|
|
|
jnc m5
|
|
|
|
|
xor ax,ax
|
|
|
|
|
m5:
|
|
|
|
|
shr ax,1
|
|
|
|
|
mov [posy],ax
|
|
|
|
|
|
|
|
|
|
shr eax,16
|
|
|
|
|
mov [maxx],ax
|
2021-12-20 23:36:51 +01:00
|
|
|
|
sub ax,const480
|
2006-01-03 10:43:31 +01:00
|
|
|
|
jnc m6
|
|
|
|
|
xor ax,ax
|
|
|
|
|
m6:
|
|
|
|
|
shr ax,1
|
|
|
|
|
mov [posx],ax
|
|
|
|
|
|
2021-12-20 23:36:51 +01:00
|
|
|
|
mov [outsize],const480+65536*const480
|
2006-01-03 10:43:31 +01:00
|
|
|
|
jmp m4
|
|
|
|
|
nofullscreen:
|
|
|
|
|
mov [posx],75
|
|
|
|
|
mov [posy],20
|
|
|
|
|
|
2021-12-20 23:36:51 +01:00
|
|
|
|
mov [outsize],const480+65536*const480
|
2006-01-03 10:43:31 +01:00
|
|
|
|
m4:
|
|
|
|
|
|
|
|
|
|
red:
|
|
|
|
|
call draw_window
|
|
|
|
|
|
|
|
|
|
still:
|
2021-12-20 23:36:51 +01:00
|
|
|
|
mcall 23,delay ; wait here for event
|
|
|
|
|
|
2006-01-03 10:43:31 +01:00
|
|
|
|
cmp eax,1 ; redraw request ?
|
|
|
|
|
je red
|
|
|
|
|
cmp eax,2 ; key in buffer ?
|
|
|
|
|
je key
|
|
|
|
|
cmp eax,3 ; button in buffer ?
|
2021-12-20 23:36:51 +01:00
|
|
|
|
je close
|
|
|
|
|
cmp eax,6 ; mouse moved ?
|
|
|
|
|
je close
|
2006-01-03 10:43:31 +01:00
|
|
|
|
|
|
|
|
|
call calcframe
|
|
|
|
|
mov eax,07 ; putimage
|
2021-12-20 23:36:51 +01:00
|
|
|
|
mov ebx,scr ; ebx pointer to image in memory
|
|
|
|
|
mov ecx,[outsize] ; ecx=image position in window [w]*65536+[h]
|
|
|
|
|
mov edx,dword [posy] ; edx=image position in window [x]*65536+[y]
|
2007-05-10 15:48:35 +02:00
|
|
|
|
mcall
|
2006-01-03 10:43:31 +01:00
|
|
|
|
jmp still
|
|
|
|
|
|
|
|
|
|
key:
|
2021-12-20 23:36:51 +01:00
|
|
|
|
cmp [screensaver], 0
|
|
|
|
|
jnz close
|
|
|
|
|
|
2006-01-03 10:43:31 +01:00
|
|
|
|
mov eax,2
|
2007-05-10 15:48:35 +02:00
|
|
|
|
mcall
|
2006-01-03 10:43:31 +01:00
|
|
|
|
|
|
|
|
|
cmp al,1 ; is key in buffer ?
|
|
|
|
|
jz still
|
|
|
|
|
cmp ah,0x1B ; is key ESC ?
|
|
|
|
|
jz close
|
|
|
|
|
jmp still
|
|
|
|
|
|
|
|
|
|
close:
|
2021-12-20 23:36:51 +01:00
|
|
|
|
cmp [screensaver], 0
|
|
|
|
|
jz @f
|
|
|
|
|
mcall 70, f70
|
|
|
|
|
@@:
|
|
|
|
|
mcall -1
|
2006-01-03 10:43:31 +01:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
; *********************************************
|
|
|
|
|
; ******* WINDOW DEFINITIONS AND DRAW ********
|
|
|
|
|
; *********************************************
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
draw_window:
|
2021-12-20 23:36:51 +01:00
|
|
|
|
mcall 12, 1 ;start draw
|
2006-01-03 10:43:31 +01:00
|
|
|
|
|
|
|
|
|
cmp [flscr],0
|
|
|
|
|
jnz m2
|
2021-12-20 23:36:51 +01:00
|
|
|
|
mcall 48,4
|
|
|
|
|
mov esi, eax
|
|
|
|
|
; DRAW WINDOW
|
|
|
|
|
mov ecx,100*65536+const480+4 ; [y start] *65536 + [y size]
|
|
|
|
|
add ecx, esi
|
|
|
|
|
mcall 0, 100*65536+const480+9,,0x74000000,,copyright
|
2006-01-03 10:43:31 +01:00
|
|
|
|
|
|
|
|
|
jmp m3
|
|
|
|
|
m2:
|
|
|
|
|
movzx ebx,[maxx] ; [x start] *65536 + [x size]
|
|
|
|
|
movzx ecx,[maxy] ; [y start] *65536 + [y size]
|
|
|
|
|
|
|
|
|
|
mov edx,0x01000000 ; color of work area RRGGBB,8->color gl
|
|
|
|
|
mov esi,0x805080d0 ; color of grab bar RRGGBB,8->color gl
|
|
|
|
|
mov edi,0x005080d0 ; color of frames RRGGBB
|
|
|
|
|
xor eax,eax ; function 0 : define and draw window
|
2007-05-10 15:48:35 +02:00
|
|
|
|
mcall
|
2006-01-03 10:43:31 +01:00
|
|
|
|
|
|
|
|
|
inc bx
|
|
|
|
|
inc cx
|
|
|
|
|
mov eax,13 ; functiom 13 : draw bar
|
2007-05-10 15:48:35 +02:00
|
|
|
|
mcall
|
2006-01-03 10:43:31 +01:00
|
|
|
|
m3:
|
|
|
|
|
|
2021-12-20 23:36:51 +01:00
|
|
|
|
mcall 12, 2 ;end draw
|
2006-01-03 10:43:31 +01:00
|
|
|
|
ret
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
calcframe:
|
|
|
|
|
cld
|
|
|
|
|
mov edi,scr
|
2021-12-20 23:36:51 +01:00
|
|
|
|
mov ecx,const480*const480*3/4
|
2006-01-03 10:43:31 +01:00
|
|
|
|
xor eax,eax
|
|
|
|
|
rep stosd ; CLS
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
mov ebx,[frame]
|
|
|
|
|
not bh
|
|
|
|
|
test bh,03h
|
|
|
|
|
not bh
|
|
|
|
|
jnz lb1
|
|
|
|
|
; ebx=xxxx xxxx xxxx xxxx xxxx xx11 xxxx xxxxb
|
|
|
|
|
mov byte [p],bl
|
|
|
|
|
lb1:
|
|
|
|
|
|
|
|
|
|
test bx,03ffh
|
|
|
|
|
jnz lb2
|
|
|
|
|
; ebx=xxxx xxxx xxxx xxxx xxxx xx00 0000 0000b
|
|
|
|
|
mov [p],0
|
|
|
|
|
|
|
|
|
|
mov eax,[pp1adr]
|
|
|
|
|
mov [pp0adr],eax
|
|
|
|
|
|
|
|
|
|
inc [pp1]
|
|
|
|
|
cmp [pp1],num_tabl_calls
|
|
|
|
|
jnz lb3
|
|
|
|
|
mov [pp1],0
|
|
|
|
|
lb3:
|
|
|
|
|
|
|
|
|
|
movzx eax,[pp1]
|
|
|
|
|
mov eax,[tabl_calls+eax*4]
|
|
|
|
|
mov [pp1adr],eax
|
|
|
|
|
lb2:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
fild [frame] ; st0=STime
|
|
|
|
|
fmul [speed1] ; st0=STime*Speed
|
|
|
|
|
fst [bt_r] ; al_rSTime*Speed
|
|
|
|
|
fadd st0,st0
|
|
|
|
|
fstp [al_r] ; al_rSTime*Speed*2
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
mov [Fl],0
|
|
|
|
|
mov ecx,[mFl]
|
|
|
|
|
mov esi,alfbet
|
|
|
|
|
ckl1:
|
|
|
|
|
call [pp0adr]
|
|
|
|
|
cmp [p],0
|
|
|
|
|
jz lb4
|
|
|
|
|
fstp [x1]
|
|
|
|
|
fstp [y1]
|
|
|
|
|
fstp [z1]
|
|
|
|
|
call [pp1adr]
|
|
|
|
|
call mix
|
|
|
|
|
lb4:
|
|
|
|
|
|
|
|
|
|
call turn
|
|
|
|
|
|
|
|
|
|
add esi,4
|
|
|
|
|
inc [Fl]
|
|
|
|
|
loop ckl1
|
|
|
|
|
|
|
|
|
|
inc ebx
|
|
|
|
|
mov [frame],ebx
|
|
|
|
|
ret
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
; turn coordinate system
|
|
|
|
|
turn:
|
|
|
|
|
; around Y
|
|
|
|
|
; x= x*cos(a)-z*sin(a)
|
|
|
|
|
; y= y
|
|
|
|
|
; z= x*sin(a)+z*cos(a)
|
|
|
|
|
fld st2 ; st0=z st1=x st2=y st3=z
|
|
|
|
|
fld st1 ; st0=x st1=z st2=x st3=y st4=z
|
|
|
|
|
fld [al_r] ; st0=a st1=x st2=z st3=x st4=y st5=z
|
|
|
|
|
fsincos ; st0=cos(a) st1=sin(a) st2=x st3=z st4=x st5=y st6=z
|
|
|
|
|
fmul st4,st0
|
|
|
|
|
fmulp st6,st0 ; st0=sin(a) st1=x st2=z st3=x*cos(a) st4=y st5=z*cos(a)
|
|
|
|
|
fmul st2,st0
|
|
|
|
|
fmulp st1,st0 ; st0=x*sin(a) st1=z*sin(a) st2=x*cos(a) st3=y st4=z*c
|
|
|
|
|
faddp st4,st0
|
|
|
|
|
fsubp st1,st0
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
; around X
|
|
|
|
|
; x=x
|
|
|
|
|
; y= y*cos(b)+z*sin(b)
|
|
|
|
|
; z=-y*sin(b)+z*cos(b)
|
|
|
|
|
fld st2 ; st0=z st1=x st2=y st3=z
|
|
|
|
|
fld st2 ; st0=y st1=z st2=x st3=y st4=z
|
|
|
|
|
fld [bt_r] ; st0=b st1=y st2=z st3=x st4=y st5=z
|
|
|
|
|
fsincos ; st0=cos(b) st1=sin(b) st2=y st3=z st4=x st5=y st6=z
|
|
|
|
|
fmul st5,st0
|
|
|
|
|
fmulp st6,st0 ; st0=sin(b) st1=y st2=z st3=x st4=y*cos(b) st5=z*cos(b)
|
|
|
|
|
fmul st2,st0
|
|
|
|
|
fmulp st1,st0 ; st0=y*sin(b) st1=z*sin(b) st2=x st3=y*cos(b) st4=z*cos(b)
|
|
|
|
|
fsubp st4,st0 ; st0=z*sin(b) st1=x st2=y*cos(b) st3=z*cos(b)-y*sin(b)
|
|
|
|
|
faddp st2,st0
|
|
|
|
|
|
|
|
|
|
; st0=x st1=y st2=z
|
|
|
|
|
fistp [x1]
|
|
|
|
|
fistp [y1]
|
|
|
|
|
fmul [Zdepth] ; st0=z*Zdepth
|
|
|
|
|
fiadd [Zcolor] ; st0=z*Zdepth+Zcolor
|
|
|
|
|
fistp [z_w] ; st0z*Zdepth+Zcolor
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
push edx
|
|
|
|
|
|
|
|
|
|
mov eax,[x1]
|
|
|
|
|
add eax,[mid]
|
2021-12-20 23:36:51 +01:00
|
|
|
|
mul [consts]
|
2006-01-03 10:43:31 +01:00
|
|
|
|
add eax,[y1]
|
|
|
|
|
add eax,[mid]
|
|
|
|
|
mul [const3]
|
|
|
|
|
|
|
|
|
|
mov dl,byte [z_w] ; al=ZZ
|
|
|
|
|
mov [scr+0+eax],dl
|
|
|
|
|
mov [scr+1+eax],dl
|
|
|
|
|
mov [scr+2+eax],dl
|
|
|
|
|
|
|
|
|
|
pop edx
|
|
|
|
|
ret
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
mix:
|
|
|
|
|
fild [p] ; st0=p
|
|
|
|
|
fmul [mp] ; st0=p=p*mp
|
|
|
|
|
fld st0 ; st0=p st1=p
|
|
|
|
|
fmul st4,st0
|
|
|
|
|
fmul st3,st0
|
|
|
|
|
fmulp st2,st0 ; st0=p st1=x*p st2=y*p st3=z*p
|
|
|
|
|
|
|
|
|
|
fld1
|
|
|
|
|
fsubrp st1,st0 ; st0=1-p st1=x*p st2=y*p st3=z*p
|
|
|
|
|
fld [z1] ; st0=z1 st1=1-p st2=x*p st3=y*p st4=z*p
|
|
|
|
|
fmul st0,st1
|
|
|
|
|
faddp st4,st0
|
|
|
|
|
fld [y1] ; st0=y1 st1=1-p st2=x*p st3=y*p st4=
|
|
|
|
|
fmul st0,st1
|
|
|
|
|
faddp st3,st0
|
|
|
|
|
fld [x1] ; st0=x1 st1=1-p st2=x*p st3=y*p+y1*(1-p) st4=
|
|
|
|
|
fmulp st1,st0 ; st0=x1*(1-p) st1=x*p st2=y*p+y1*(1-p) st3=
|
|
|
|
|
faddp st1,st0 ; st0=x=x*p+x1*(1-p) st1=y=y*p+y1*(1-p) st2=z
|
|
|
|
|
ret
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
filling_alfbet:
|
|
|
|
|
; Initialize RND
|
|
|
|
|
mov eax,3
|
2007-05-10 15:48:35 +02:00
|
|
|
|
mcall
|
2006-01-03 10:43:31 +01:00
|
|
|
|
; eax - fist random number
|
|
|
|
|
|
|
|
|
|
mov ecx,n_points
|
|
|
|
|
mov edi,alfbet
|
|
|
|
|
mov ebx,8088405h
|
|
|
|
|
ck2:
|
|
|
|
|
stosd
|
|
|
|
|
; Compute next random number
|
|
|
|
|
; New := 8088405H * Old + 1
|
|
|
|
|
mul ebx
|
|
|
|
|
inc eax
|
|
|
|
|
loop ck2
|
|
|
|
|
ret
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
; DATA AREA
|
|
|
|
|
align 2
|
|
|
|
|
|
|
|
|
|
frame dd 0
|
|
|
|
|
|
|
|
|
|
mp dd 0.00390625
|
|
|
|
|
n_r dd 0.00390625
|
|
|
|
|
|
|
|
|
|
mal_r dd 6.28318530717958648
|
|
|
|
|
mbt_r dd 6.28318530717958648
|
|
|
|
|
|
|
|
|
|
const3 dd 3
|
|
|
|
|
const6 dw 6
|
2021-12-20 23:36:51 +01:00
|
|
|
|
consts dd const480
|
2006-01-03 10:43:31 +01:00
|
|
|
|
|
|
|
|
|
mFl dd n_points
|
|
|
|
|
pp1 dw 0
|
|
|
|
|
|
|
|
|
|
Zdepth dd 0.3
|
|
|
|
|
Zcolor dw 140
|
|
|
|
|
|
|
|
|
|
mid dd 240 ; centre of screen
|
|
|
|
|
|
|
|
|
|
speed1 dd speed
|
|
|
|
|
flscr db fullscreen
|
|
|
|
|
|
|
|
|
|
align 4
|
|
|
|
|
|
|
|
|
|
outsize dd ?
|
|
|
|
|
posy dw ?
|
|
|
|
|
posx dw ?
|
|
|
|
|
maxy dw ?
|
|
|
|
|
maxx dw ?
|
|
|
|
|
|
|
|
|
|
Fl dd ?
|
|
|
|
|
|
|
|
|
|
p dd ?
|
|
|
|
|
al_r dd ?
|
|
|
|
|
bt_r dd ?
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
pp0adr dd ?
|
|
|
|
|
pp1adr dd ?
|
|
|
|
|
|
|
|
|
|
z_w dw ?
|
|
|
|
|
|
|
|
|
|
x1 dd ?
|
|
|
|
|
y1 dd ?
|
|
|
|
|
z1 dd ?
|
|
|
|
|
|
2021-12-20 23:36:51 +01:00
|
|
|
|
f70: ; run
|
|
|
|
|
dd 7, 0, 0, 0, 0
|
|
|
|
|
db '/sys/@SS',0
|
|
|
|
|
|
|
|
|
|
screensaver db ?
|
|
|
|
|
params rb 4
|
|
|
|
|
transparent_cursor rd 32*32
|
|
|
|
|
|
2006-01-03 10:43:31 +01:00
|
|
|
|
align 16
|
|
|
|
|
alfbet: ; alfbet db n_points*4 dup (?)
|
|
|
|
|
scr = alfbet+n_points*4 ; scr db 480*480*3+1 dup (?)
|
2021-12-20 23:36:51 +01:00
|
|
|
|
i_end = scr+const480*const480*3+1 ; i_param db 256 dup (?)
|