Subversion Repositories Kolibri OS

Rev

Rev 5888 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
2529 mario79 1
;------------------------------------------------------------------------------
2
;   @SS - screensaver
3
;------------------------------------------------------------------------------
5888 pathoswith 4
; last update:	30/03/2012
5
; changed by:	Marat Zakiyanov aka Mario79, aka Mario
6
; changes:	The program uses only 4 Kb memory is now.
7
;		Code refactoring. Using transparent cursor.
8
;		Fix bug - using lots of buttons from f.8.
2529 mario79 9
;---------------------------------------------------------------------
1747 mario79 10
;   SCREENSAVER APPLICATION by lisovin@26.ru
11
;
12
;   Compile with FASM for Menuet
13
;
2529 mario79 14
;------------------------------------------------------------------------------
15
	use32
16
	org 0x0
1747 mario79 17
 
2529 mario79 18
	db 'MENUET01'	; 8 byte id
5888 pathoswith 19
	dd 0x01 	; header version
2529 mario79 20
	dd START	; start of code
21
	dd IM_END	; size of image
22
	dd I_END	; memory for app
23
	dd stack_top	; esp
2535 mario79 24
	dd I_Param	; boot parameters
2529 mario79 25
	dd 0x0		; path
26
;------------------------------------------------------------------------------
27
include '..\..\..\macros.inc'
1747 mario79 28
;include   'debug.inc'
2529 mario79 29
;------------------------------------------------------------------------------
30
align 4
1747 mario79 31
START:
2529 mario79 32
	mcall	68,11
9450 leency 33
	mcall	40, EVM_REDRAW + EVM_KEY + EVM_BUTTON + EVM_MOUSE
2535 mario79 34
; boot parameters
9450 leency 35
	cmp [I_Param], dword '@ss'
36
	setz [screensaver]
2535 mario79 37
	cmp	[I_Param],dword 'ZERO'
38
	jne	@f
39
	mov	[type],dword 0
40
;--------------------------------------
3645 fedesco 41
align 4
2535 mario79 42
@@:
43
	cmp	[I_Param],dword 'ASSM'
44
	jne	bgr_changed
45
	mov	[type],dword 24
2529 mario79 46
;------------------------------------------------------------------------------
47
align 4
1747 mario79 48
bgr_changed:
49
 
2529 mario79 50
	mcall	14
51
	mov	[y_max],ax
52
	shr	eax,16
53
	mov	[x_max],ax
54
	shl	eax,16
55
	mov	[top_right_corner],eax
9450 leency 56
 
57
	call create_ss
2529 mario79 58
;------------------------------------------------------------------------------
59
align 4
1747 mario79 60
still:
2529 mario79 61
	cmp	al,2		; key in buffer?
62
	jz	key
63
 
64
	cmp	al,5		; background redraw?
65
	jz	bgr_changed
1747 mario79 66
; mouse event
2529 mario79 67
	mcall	37,2		; проверим кнопки
68
	and	al,3
69
	cmp	al,3		; нажаты обе кнопки мыши?
70
	jnz	still
71
 
72
	mcall	37,0		; проверим координаты
73
	cmp	[top_right_corner],eax
74
	jnz	still
75
;------------------------------------------------------------------------------
76
align 4
1747 mario79 77
key:
5888 pathoswith 78
	mcall			; eax = 2
2529 mario79 79
	jmp	still
80
;------------------------------------------------------------------------------
81
align 4
1747 mario79 82
create_ss:
2529 mario79 83
	mcall	40,100010b
84
;set_new_cursor_skin - transparent cursor
85
	mcall	68,12,32*32*4	; get memory for own cursor area
1747 mario79 86
 
2529 mario79 87
	push	eax
88
	mov	ecx,eax
5888 pathoswith 89
	mcall	37,4,,2 	; load own cursor
1747 mario79 90
 
2529 mario79 91
	mov	ecx,eax
92
	mcall	37,5		; set own cursor
1747 mario79 93
 
2529 mario79 94
	pop	ecx
95
	mcall	68,13	; free own cursor area
1747 mario79 96
 
2529 mario79 97
	cmp	[type],dword 0
98
	je	drawsswin
1747 mario79 99
 
2529 mario79 100
	cmp	[type],dword 24
101
	je	asminit
1747 mario79 102
 
2529 mario79 103
	mov	dword [delay],1
5888 pathoswith 104
	mov	[lx1],10	 ; for "draw line"
2529 mario79 105
	mov	[lx2],40
106
	mov	[ly1],50
107
	mov	[ly2],100
108
	mov	[addx1],1
109
	mov	[addx2],1
110
	mov	[addy1],1
111
	mov	[addy2],1
112
	jmp	drawsswin
113
;--------------------------------------
3645 fedesco 114
align 4
2529 mario79 115
asminit:	; for "assembler" - assembler sources demo
116
; get size of file
117
	mov	[fileinfo],dword 5
118
	mov	[fileinfo.point],dword fileinfo_buffer
119
	mcall	70,fileinfo
120
	test	eax,eax
121
	jnz	.no_file
122
; get memory for file
123
	mov	ecx,[fileinfo_buffer+32]
124
	mov	[fileinfo.size],ecx
125
	mcall	68,12
126
	mov	[fileinfo.point],eax
127
; load file
128
	mov	[fileinfo],dword 0
129
	mcall	70,fileinfo
130
	test	eax,eax
131
	jz	@f
132
	mcall	68,13,[fileinfo.point]
133
;--------------------------------------
3645 fedesco 134
align 4
2529 mario79 135
.no_file:
136
	mov	[type],dword 0
137
	jmp	drawsswin
138
;--------------------------------------
3645 fedesco 139
align 4
2529 mario79 140
@@:
5888 pathoswith 141
	mov	dword [delay],1 ;25 - old value
2529 mario79 142
;--------------------------------------
3645 fedesco 143
align 4
2529 mario79 144
asminit1:
145
	mov	eax,[fileinfo.point]
146
	mov	[stringstart],eax
147
	mov	dword [stringlen],1
148
;--------------------------------------
3645 fedesco 149
align 4
2529 mario79 150
newpage:
5888 pathoswith 151
	mov	[stringpos],16
2529 mario79 152
;--------------------------------------
3645 fedesco 153
align 4
2529 mario79 154
drawsswin:
155
	xor	eax,eax
156
	movzx	ebx,[x_max]
157
	movzx	ecx,[y_max]
158
	inc	ebx
159
	inc	ecx
160
	mcall	,,,0x01000000
1747 mario79 161
 
2529 mario79 162
	xor	edx,edx
163
	mcall	13
164
;--------------------------------------
3645 fedesco 165
align 4
2529 mario79 166
tstill:
167
	mcall	23,[delay]
168
	test	eax,eax
169
	jnz	thr_end
1747 mario79 170
 
2529 mario79 171
	cmp	[type],dword 0
172
	je	tstill
1747 mario79 173
 
2529 mario79 174
	cmp	[type],dword 24
175
	je	drawssasm
1747 mario79 176
 
2529 mario79 177
	call	draw_line
178
	jmp	tstill
179
;--------------------------------------
3645 fedesco 180
align 4
2529 mario79 181
thr_end:
9450 leency 182
    cmp     [screensaver], 0
183
    jz      @f
184
    mcall   70, f70
185
@@:
2529 mario79 186
	cmp	[type],dword 24
187
	jne	@f
188
	mcall	68,13,[fileinfo.point]
189
@@:
190
	and	[params], not 1
191
	or	eax,-1
192
	mcall
193
;------------------------------------------------------------------------------
194
align 4
195
drawssasm:
196
	mov	edi,[stringstart]
197
	add	edi,[stringlen]
198
	dec	edi
1747 mario79 199
 
2529 mario79 200
	mov	eax,edi
201
	sub	eax,[fileinfo.point]
1747 mario79 202
 
2529 mario79 203
	cmp	eax,[fileinfo.size]
204
	ja	asminit1
1747 mario79 205
 
2529 mario79 206
	cmp	word [edi],0x0a0d
207
	je	addstring
1747 mario79 208
 
2529 mario79 209
	cmp	byte [edi],0x0a
210
	jne	noaddstring
1747 mario79 211
 
2529 mario79 212
	dec	edi
213
;--------------------------------------
3645 fedesco 214
align 4
2529 mario79 215
addstring:
5888 pathoswith 216
	add	[stringpos],16
2529 mario79 217
	add	edi,2
218
	mov	[stringstart],edi
219
	mov	dword [stringlen],1
220
	mov	ax,[stringpos]
221
	cmp	ax,[y_max]
222
	jb	tstill
223
	jmp	newpage
224
;--------------------------------------
3645 fedesco 225
align 4
2529 mario79 226
noaddstring:
5888 pathoswith 227
	mov	ebx,[stringlen]
228
	shl	ebx,19
2529 mario79 229
	mov	bx,[stringpos]
5888 pathoswith 230
	mov	edx,[stringstart]
231
	add	edx,[stringlen]
232
	dec	edx
233
	mcall	4,,0x104ba010,,1
2529 mario79 234
	inc	dword [stringlen]
235
	cmp	[edi],byte ' '
236
	je	drawssasm
237
	jmp	tstill
238
;------------------------------------------------------------------------------
239
align 4
240
draw_line:
241
	movzx	esi,[x_max]
242
	movzx	edi,[y_max]
1747 mario79 243
 
2529 mario79 244
	mov	eax,[addx1]
245
	add	[lx1],eax
246
	mov	eax,[addy1]
247
	add	[ly1],eax
1747 mario79 248
 
2529 mario79 249
	mov	eax,[addx2]
250
	add	[lx2],eax
251
	mov	eax,[addy2]
252
	add	[ly2],eax
3645 fedesco 253
 
2529 mario79 254
	cmp	[lx1],1
255
	jge	dl1
256
	mov	[addx1],1
257
;--------------------------------------
3645 fedesco 258
align 4
2529 mario79 259
dl1:
260
	cmp	[lx2],1
261
	jge	dl2
1747 mario79 262
 
2529 mario79 263
	mov	[addx2],1
264
;--------------------------------------
3645 fedesco 265
align 4
2529 mario79 266
dl2:
267
	cmp	[lx1],esi
268
	jbe	dl3
269
 
270
	mov	[addx1],0xffffffff
271
;--------------------------------------
3645 fedesco 272
align 4
2529 mario79 273
dl3:
274
	cmp	[lx2],esi
275
	jbe	dl4
276
 
277
	mov	[addx2],0xffffffff
278
;--------------------------------------
3645 fedesco 279
align 4
2529 mario79 280
dl4:
281
	cmp	[ly1],1
282
	jge	dl5
283
	mov	[addy1],1
284
;--------------------------------------
3645 fedesco 285
align 4
2529 mario79 286
dl5:
287
	cmp	[ly2],2
288
	jge	dl6
289
 
290
	mov	[addy2],1
291
;--------------------------------------
3645 fedesco 292
align 4
2529 mario79 293
dl6:
294
	cmp	[ly1],edi
295
	jbe	dl7
296
 
297
	mov	[addy1],-1
298
;--------------------------------------
3645 fedesco 299
align 4
2529 mario79 300
dl7:
301
	cmp	[ly2],edi
302
	jbe	dl8
303
 
304
	mov	[addy2],-1
305
;--------------------------------------
3645 fedesco 306
align 4
2529 mario79 307
dl8:
308
	mov	eax,[lx2]
309
	cmp	[lx1],eax
310
	jz	dnol
3645 fedesco 311
 
2529 mario79 312
	mov	bx,word [lx1]
313
	shl	ebx,16
314
	mov	bx,word [lx2]
315
 
316
	mov	cx,word [ly1]
317
	shl	ecx,16
318
	mov	cx,word [ly2]
3645 fedesco 319
 
2529 mario79 320
	mov	edx,[lcolor]
321
	and	edx,0xffffff
322
	mcall	38
323
;--------------------------------------
3645 fedesco 324
align 4
2529 mario79 325
dnol:
326
	add	[lcolor],0x010201
327
	ret
328
;------------------------------------------------------------------------------
5888 pathoswith 329
align 4 	; DATA AREA
2529 mario79 330
type	dd 12
331
delay	dd 100
332
lx1	dd 10
333
lx2	dd 40
334
ly1	dd 50
335
ly2	dd 100
336
addx1	dd 1
337
addx2	dd 1
338
addy1	dd 1
339
addy2	dd 1
340
stringlen	dd 1
341
stringstart	dd 0
1747 mario79 342
 
5888 pathoswith 343
stringpos	dw 16
344
params		db 0	;if bit 0 set-ssaver works if bit 1 set-setup works
1747 mario79 345
 
346
fileinfo:
2529 mario79 347
	dd 0
348
	dd 0
349
	dd 0
350
.size:	dd 0
5888 pathoswith 351
.point: dd 0
2529 mario79 352
	db '/sys/macros.inc',0
5888 pathoswith 353
 
9450 leency 354
f70:    ; run
355
        dd 7, 0, 0, 0, 0
356
        db '/sys/@SS',0
357
 
358
screensaver db ?
359
 
5888 pathoswith 360
;-------------------------------
361
IM_END: 	; UNINITIALIZED DATA
362
top_right_corner	rd 1
2529 mario79 363
align 4
364
lcolor	dd ?
365
x_max	dw ?	; размеры экрана
366
y_max	dw ?
2535 mario79 367
I_Param:
2529 mario79 368
fileinfo_buffer:
369
	rb 40
5888 pathoswith 370
;-------------------------------
2529 mario79 371
	rb 512
372
stack_top:
373
I_END: