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 |