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