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