Subversion Repositories Kolibri OS

Rev

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

Rev Author Line No. Line
31 halyavin 1
include "lang.inc"
2094 dunkaist 2
include "../../../macros.inc"
31 halyavin 3
 
4
WND_SIZE_X		= 320
5
WND_SIZE_Y		= 200
6
 
7
VC_DELTA = 1
8
HC_DELTA = 2
9
 
10
MEOS_APP_START
11
CODE
12
    fninit
13
    call init_sinus_table
14
    call init_background
15
    call init_palette
16
    mov eax,40
17
    mov ebx,101b
485 heavyiron 18
    mcall
31 halyavin 19
    jmp .paint_window
20
 
21
.event_loop:
22
    mov eax,23
23
    mov ebx,1
485 heavyiron 24
    mcall
31 halyavin 25
 
26
    test eax,eax
27
    je .draw_screen
28
    dec eax
29
    je .paint_window
30
 
31
    or  eax,-1
485 heavyiron 32
    mcall
31 halyavin 33
 
34
.draw_screen:
2094 dunkaist 35
    test [proc_info.wnd_state], 0x04
36
    jnz .event_loop
31 halyavin 37
    add word [ver_counter],VC_DELTA
38
    add word [hor_counter],HC_DELTA
39
    call handle_animation
40
    mov eax,7
41
    mov ebx,virtual_screen_32
42
    mov ecx,(WND_SIZE_X shl 16)+WND_SIZE_Y
316 heavyiron 43
    xor edx,edx
485 heavyiron 44
    mcall
31 halyavin 45
    jmp .event_loop
46
 
47
.paint_window:
2094 dunkaist 48
	mcall	9,proc_info,-1
31 halyavin 49
    mov eax,12
50
    mov ebx,1
485 heavyiron 51
    mcall
31 halyavin 52
 
53
    xor eax,eax
54
    mov ebx,(100 shl 16)+(WND_SIZE_X+9)
2029 leency 55
    mov ecx,(100 shl 16)+(WND_SIZE_Y+26)
56
    mov edx,0x74000000
485 heavyiron 57
    mov edi,title
58
    mcall
31 halyavin 59
 
2094 dunkaist 60
    test [proc_info.wnd_state], 0x04
61
    jnz @f
62
 
31 halyavin 63
    mov eax,7
64
    mov ebx,virtual_screen_32
65
    mov ecx,(WND_SIZE_X shl 16)+WND_SIZE_Y
316 heavyiron 66
    xor edx,edx
485 heavyiron 67
    mcall
2094 dunkaist 68
  @@:
31 halyavin 69
    mov eax,12
70
    mov ebx,2
485 heavyiron 71
    mcall
31 halyavin 72
 
73
    jmp .event_loop
74
 
75
init_palette:
76
    mov ecx,256
77
    mov edi,_palette
78
    xor eax,eax
79
.next_pal:
80
    mov al,ah
81
    shr al,2
82
    stosb
83
    stosb
84
    stosb
85
    inc edi
86
    inc ah
87
    loop .next_pal
88
    ret
89
 
90
init_sinus_table:
91
    sub esp,4
92
    mov ecx,256
93
    mov edi,sinetable
94
.sin_loop:
95
    fld dword [esp]
96
    fld st0
97
    fsin
98
    fmul [scale_sin]
99
    fistp word [edi]
100
    fadd [delta_angle]
101
    fstp dword [esp]
102
    add edi,2
103
    loop .sin_loop
104
    add esp,4
105
    ret
106
 
107
init_background:
108
    mov edi,background
109
    xor edx,edx
110
.ib_vertical:
111
    xor ecx,ecx
112
.ib_horizontal:
113
    mov eax,ecx
114
    xor eax,edx
115
    stosb
116
    inc ecx
117
    cmp ecx,256
118
    jne .ib_horizontal
119
    inc edx
120
    cmp edx,256
121
    jne .ib_vertical
122
    ret
123
 
124
s_OFFX		= 0
125
s_OFFY		= 2
126
 
127
handle_animation:
128
    sub esp,4
129
    mov ebx,[ver_counter]
130
    and ebx,255
131
    add ebx,ebx
132
    mov ax,[sinetable+ebx]
133
    mov [esp+s_OFFY],ax
134
    mov ebx,[hor_counter]
135
    and ebx,255
136
    add ebx,ebx
137
    mov ax,[sinetable+ebx]
138
    mov [esp+s_OFFX],ax
139
    mov edi,virtual_screen_32
140
    mov edx,WND_SIZE_Y-1
141
.a_ver:
142
    mov ecx,WND_SIZE_X-1
143
    mov bx,[esp+s_OFFY]
144
    add bx,dx
145
    and ebx,255
146
    shl ebx,8
147
.a_hor:
148
    mov ax,[esp+s_OFFX]
149
    add ax,cx
150
    and eax,255
151
    lea esi,[background+ebx+eax]
152
    mov al,[esi]
153
    and eax,0xff
154
    mov eax,[_palette+eax*4]
155
    stosw
156
    shr eax,16
157
    stosb
158
    dec ecx
159
    jge .a_hor
160
    dec edx
161
    jge .a_ver
162
    add esp,4
163
    ret
164
 
165
DATA
166
  delta_angle dd 0.0245436926066		; pi/128
167
  scale_sin dd 128.0
168
 
485 heavyiron 169
  title      db 'MoveBack',0
31 halyavin 170
 
171
UDATA
172
  ver_counter dd ?
173
  hor_counter dd ?
174
 
175
  _palette:	rd 256
176
 
177
  virtual_screen_32:
178
  	rb WND_SIZE_X*WND_SIZE_Y*3
179
 
180
  background:
181
  	rb 256*256
182
 
183
  sinetable:
184
  	rw 256
185
 
2094 dunkaist 186
  proc_info	process_information
187
 
188
MEOS_APP_END