Rev 2752 | Go to most recent revision | Only display areas with differences | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 2752 | Rev 9971 | ||
---|---|---|---|
1 | ; |
1 | ; |
2 | ; MARIO for MENUET |
2 | ; MARIO for MENUET |
3 | ; |
3 | ; |
4 | ; Compile with fasm |
4 | ; Compile with fasm |
5 | ; |
5 | ; |
6 | 6 | ||
7 | use32 |
7 | use32 |
8 | 8 | ||
9 | org 0x0 |
9 | org 0x0 |
10 | 10 | ||
11 | db 'MENUET00' ; 8 byte id |
11 | db 'MENUET01' ; header |
12 | dd 38 ; required os |
12 | dd 1 ; version |
13 | dd START ; program start |
13 | dd START ; program start |
14 | dd I_END ; image size |
14 | dd I_END ; image size |
15 | dd 0x100000 ; reguired amount of memory |
15 | dd MEM ; size memory program |
- | 16 | dd STACKTOP ; pointer to begin stack pos |
|
- | 17 | dd 0 |
|
16 | dd 0x00000000 ; reserved=no extended header |
18 | dd 0 |
- | 19 | ||
- | 20 | res_base = loadp + 0x36 ; offset on array pixel in BMP file |
|
- | 21 | res_width_px = 150 |
|
- | 22 | res_height_px = 35 |
|
- | 23 | res_line_size = (res_width_px*3 + 11b) and not 11b ; 150*3 + 2 |
|
17 | 24 | ||
- | 25 | ||
18 | 26 | block_width = 40 |
|
19 | empty equ 0x80000 + 0*3*40*40 |
27 | block_height = 40 |
20 | build_1 equ 0x80000 + 1*3*40*40 |
28 | block_line_size = block_width * 3 |
- | 29 | block_img_size = block_width * block_height * 3 |
|
21 | build_2 equ 0x80000 + 2*3*40*40 |
30 | block_draw_size = (block_width shl 16) + block_height ; for sysfn 7 |
22 | build_3 equ 0x80000 + 3*3*40*40 |
31 | block_count_pixel = block_width * block_height |
23 | 32 | ||
24 | mario_1 equ 0x90000 + 0*3*70*51 |
33 | mario_width = 50 |
25 | mario_2 equ 0x90000 + 1*3*70*51 |
34 | mario_height = 70 |
26 | mario_3 equ 0x90000 + 2*3*70*51 |
35 | mario_line_size = mario_width * 3 |
27 | mario_4 equ 0x90000 + 3*3*70*51 |
36 | mario_img_size = mario_width * mario_height * 3 |
28 | mario_5 equ 0x90000 + 4*3*70*51 |
37 | mario_draw_size = (mario_width shl 16) + mario_height |
- | 38 | mario_count_pixel = mario_width * mario_height |
|
- | 39 | ||
- | 40 | ||
- | 41 | wnd_pos_x = 80 |
|
- | 42 | wnd_pos_y = 20 |
|
- | 43 | ||
29 | mario_6 equ 0x90000 + 5*3*70*51 |
44 | wnd_header_size = 0x16 |
30 | mario_green equ 0x90000 + 6*3*70*51 |
45 | wnd_height = 9*block_height + wnd_header_size |
31 | loadp equ 0x90000 + 7*3*70*51 |
46 | wnd_width = 12*block_width + 1 |
32 | 47 | ||
33 | 48 | ||
34 | START: |
49 | START: |
35 | 50 | ||
36 | 51 | ||
37 | call load_graph |
52 | call load_graph |
38 | 53 | ||
39 | mov [marioxy], dword 300*65536+270 |
54 | mov [marioxy], dword 300*65536+270 |
40 | mov [leftright], dword 1 |
55 | mov [leftright], dword 1 |
41 | mov [velocity], dword 0xff |
56 | mov [velocity], dword 0xff |
42 | 57 | ||
43 | call draw_window |
58 | call draw_window |
44 | 59 | ||
45 | 60 | ||
46 | sta: |
61 | sta: |
47 | 62 | ||
48 | mov eax,field |
63 | mov eax,field |
49 | mov edx,1*65526+30 |
- | |
50 | mov [xxyy],dword 1*65536+22 |
64 | mov dword[xxyy], 1*65536 + wnd_header_size |
51 | 65 | ||
52 | stl: |
66 | stl: |
53 | 67 | ||
54 | cmp [eax],byte ' ' |
68 | cmp byte[eax], ' ' |
55 | jnz noempty |
69 | jnz @f |
56 | mov ebx,empty |
70 | mov ebx,empty |
57 | noempty: |
71 | @@: |
58 | 72 | ||
59 | cmp [eax],byte '1' |
73 | cmp byte[eax], '1' |
60 | jnz no1 |
74 | jnz @f |
61 | mov ebx,build_1 |
75 | mov ebx,build_1 |
62 | no1: |
76 | @@: |
63 | 77 | ||
64 | cmp [eax],byte '2' |
78 | cmp byte[eax], '2' |
65 | jnz no2 |
79 | jnz @f |
66 | mov ebx,build_2 |
80 | mov ebx,build_2 |
67 | no2: |
81 | @@: |
68 | 82 | ||
69 | cmp [eax],byte '3' |
83 | cmp byte[eax], '3' |
70 | jnz no3 |
84 | jnz @f |
71 | mov ebx,build_3 |
85 | mov ebx,build_3 |
72 | no3: |
86 | @@: |
73 | 87 | ||
74 | pusha |
88 | pusha |
75 | 89 | ||
76 | mov edx,[xxyy] |
90 | mov edx,[xxyy] |
77 | 91 | ||
78 | mov eax,7 ; display image |
92 | mov eax,7 ; display image |
79 | mov ecx,40*65536+40 |
93 | mov ecx, block_draw_size |
80 | int 0x40 |
94 | int 0x40 |
81 | 95 | ||
82 | popa |
96 | popa |
83 | 97 | ||
84 | add word [xxyy+2],word 40 |
98 | add word [xxyy+2], block_width |
85 | cmp word [xxyy+2],word 40*12+1 |
99 | cmp word [xxyy+2], block_width*12+1 |
86 | jnz nonewline |
- | |
87 | mov word [xxyy+2],word 1 |
- | |
88 | add word [xxyy+0],word 40 |
- | |
89 | nonewline: |
- | |
90 | - | ||
91 | add eax,1 |
- | |
92 | cmp eax,field+12*9 |
- | |
93 | jz nodraw |
- | |
- | 100 | jnz .nonewline |
|
- | 101 | ||
94 | jmp stl |
102 | mov word [xxyy+2], 1 |
- | 103 | add word [xxyy+0], block_height |
|
- | 104 | .nonewline: |
|
- | 105 | ||
95 | 106 | add eax,1 |
|
96 | nodraw: |
107 | cmp eax, field.end |
97 | 108 | jnz stl |
|
98 | 109 | ||
99 | ; ********* MAIN LOOP *********** |
110 | ; ********* MAIN LOOP *********** |
100 | 111 | ||
101 | 112 | ||
102 | wait_for_event: |
113 | wait_for_event: |
103 | 114 | ||
104 | call draw_mario |
115 | call draw_mario |
105 | 116 | ||
106 | mov eax,11 ; check for event |
117 | mov eax,11 ; check for event |
107 | int 0x40 |
118 | int 0x40 |
- | 119 | ||
108 | cmp eax,1 |
120 | cmp eax,1 |
109 | jz red |
121 | jz red |
110 | cmp eax,2 |
122 | cmp eax,2 |
111 | jz key |
123 | jz key |
112 | cmp eax,3 |
124 | cmp eax,3 ; check pressed button |
113 | jnz wait_for_event |
125 | jnz wait_for_event |
- | 126 | ||
114 | 127 | mov eax, -1 ; close this program |
|
115 | jmp button |
128 | int 0x40 |
116 | 129 | ||
117 | red: |
130 | red: |
118 | 131 | ||
119 | mov [mariomem],dword 0x0 |
132 | mov [mariomem],dword 0x0 |
120 | 133 | ||
121 | call draw_window |
134 | call draw_window |
122 | jmp sta |
135 | jmp sta |
123 | 136 | ||
124 | key: |
137 | key: |
125 | 138 | ||
126 | mov [mariomem],dword 0x0 |
139 | mov [mariomem],dword 0x0 |
127 | 140 | ||
128 | mov eax,2 ; ah <- key |
141 | mov eax,2 ; ah <- key |
129 | int 0x40 |
142 | int 0x40 |
130 | 143 | ||
131 | cmp ah,176 |
144 | cmp ah,176 ; 'left' |
132 | jnz key1 |
145 | jnz key1 |
133 | mov byte [leftright],byte 1 |
146 | mov byte [leftright],byte 1 |
134 | key1: |
147 | key1: |
135 | 148 | ||
136 | cmp ah,179 |
149 | cmp ah,179 ; 'right' |
137 | jnz key2 |
150 | jnz key2 |
138 | mov byte [leftright],byte 4 |
151 | mov byte [leftright],byte 4 |
139 | key2: |
152 | key2: |
140 | 153 | ||
141 | cmp ah,177 |
154 | cmp ah,177 ; 'down' |
142 | jnz key3 |
155 | jnz key3 |
143 | mov al,byte [leftright] |
156 | mov al,byte [leftright] |
144 | mov bl,al |
157 | mov bl,al |
145 | cmp al,1 |
158 | cmp al,1 |
146 | jnz key31 |
159 | jnz key31 |
147 | mov bl,2 |
160 | mov bl,2 |
148 | key31: |
161 | key31: |
149 | cmp al,4 |
162 | cmp al,4 |
150 | jnz key32 |
163 | jnz key32 |
151 | mov bl,3 |
164 | mov bl,3 |
152 | key32: |
165 | key32: |
153 | mov byte [leftright],bl |
166 | mov byte [leftright],bl |
154 | key3: |
167 | key3: |
155 | 168 | ||
156 | cmp ah,178 |
169 | cmp ah,178 ; 'up' |
157 | jnz key4 |
170 | jnz key4 |
158 | cmp [velocity],dword 0xff |
171 | cmp [velocity],dword 0xff |
159 | jnz key4 |
172 | jnz key4 |
160 | mov [velocity],dword 0x110 |
173 | mov [velocity],dword 0x110 |
161 | key4: |
174 | key4: |
- | 175 | ||
162 | 176 | ; this code using for fix defects drawing(draw in caption area) |
|
163 | mov eax,71 ;draw caption |
177 | mov eax,71 ;draw caption |
164 | mov ebx,1 |
178 | mov ebx,1 |
165 | mov ecx,title |
179 | mov ecx,title |
166 | int 0x40 |
180 | int 0x40 |
167 | 181 | ||
168 | jmp sta ;draw field |
182 | jmp sta ;draw field |
169 | 183 | ||
170 | ;jmp wait_for_event |
184 | ;jmp wait_for_event |
171 | - | ||
172 | button: |
- | |
173 | - | ||
174 | mov eax,0xffffffff ; close this program |
- | |
175 | int 0x40 |
- | |
176 | - | ||
177 | 185 | ||
178 | load_graph: |
186 | load_graph: |
179 | 187 | ||
180 | pusha |
188 | pusha |
181 | - | ||
182 | mov eax,6 ; 6 = open file |
- | |
183 | mov ebx,filename |
- | |
184 | mov ecx,0 |
- | |
185 | mov edx,0xFFFFFF |
- | |
186 | mov esi,loadp |
189 | |
187 | mov edi,0 ; floppy |
- | |
188 | int 0x40 |
- | |
189 | - | ||
190 | ; empty |
- | |
191 | 190 | ; empty block init - set in 0x00500f color |
|
192 | mov edi,empty |
191 | mov edi,empty |
193 | mov ecx,40*40 |
192 | mov ecx, block_count_pixel |
194 | mov eax,0x00500f |
193 | mov eax,0x00500f |
195 | cld |
194 | cld |
196 | emptyl: |
195 | @@: |
197 | mov [edi],eax |
196 | mov [edi],eax |
198 | add edi,3 |
197 | add edi, 3 |
199 | loop emptyl |
198 | loop @b |
200 | 199 | ||
201 | mov [width],40*3 |
200 | mov [width], block_line_size |
202 | mov [width_move],20 |
- | |
203 | mov [sub_esi],150*3+2 |
201 | mov [width_move], block_width/2 |
204 | mov [add_edi],40*3*2 |
202 | mov [height_move], block_height/2 |
205 | mov [imul_esi],20*3 |
203 | mov [imul_esi],20*3 |
206 | mov [base],loadp+18*3+3*150*34+3*98-1 |
204 | mov [base], res_base + 3*res_width_px * 34 +3*98-1 |
207 | 205 | ||
208 | mov esi,0 |
206 | mov esi,0 |
209 | mov edi,build_1 |
207 | mov edi,build_1 |
210 | call convert |
208 | call convert |
211 | 209 | ||
212 | mov esi,1 |
210 | mov esi,1 |
213 | mov edi,build_2 |
211 | mov edi,build_2 |
214 | call convert |
212 | call convert |
215 | 213 | ||
216 | 214 | ||
217 | 215 | ||
218 | ; build_3 |
216 | ; build_3 |
219 | - | ||
220 | mov edi,build_3 |
217 | mov edi,build_3 |
221 | mov esi,loadp+18*3+230*3+3*300*69 |
218 | mov esi, res_base + 230*3+3*300*69 |
222 | mov ecx,40 |
219 | mov ecx, block_height |
223 | build_3l: |
220 | build_3l: |
224 | pusha |
221 | pusha |
225 | mov ecx,3*40 |
222 | mov ecx, block_line_size |
226 | cld |
223 | cld |
227 | rep movsb |
224 | rep movsb |
228 | popa |
225 | popa |
229 | sub esi,300*3 |
226 | sub esi,300*3 |
230 | add edi,40*3 |
227 | add edi, block_line_size |
231 | loop build_3l |
228 | loop build_3l |
232 | 229 | ||
233 | mov [width],50*3 |
230 | mov [width], mario_line_size |
234 | mov [width_move],25 |
231 | mov [width_move], mario_width/2 |
235 | mov [sub_esi],150*3+2 |
- | |
236 | mov [add_edi],50*3*2 |
232 | mov [height_move], mario_height/2 |
237 | mov [imul_esi],25*3 |
233 | mov [imul_esi],25*3 |
238 | mov [base],loadp+18*3+3*150*34+68 |
234 | mov [base], res_base + 3*res_width_px*34 + 68 |
239 | 235 | ||
240 | mov esi,0 |
236 | mov esi,0 |
241 | mov edi,mario_1 |
237 | mov edi,mario_1 |
242 | call convert |
238 | call convert |
243 | 239 | ||
244 | mov esi,1 |
240 | mov esi,1 |
245 | mov edi,mario_2 |
241 | mov edi,mario_2 |
246 | call convert |
242 | call convert |
247 | 243 | ||
248 | mov esi,2 |
244 | mov esi,2 |
249 | mov edi,mario_3 |
245 | mov edi,mario_3 |
250 | call convert |
246 | call convert |
251 | 247 | ||
252 | jmp mario_mirror |
248 | jmp mario_mirror |
253 | 249 | ||
- | 250 | ||
254 | 251 | ; copy in [edi], image x2 |
|
255 | convert: |
252 | convert: |
256 | 253 | ||
257 | imul esi,[imul_esi] |
254 | imul esi,[imul_esi] |
258 | add esi,[base] ; loadp+18*3+3*150*34+68 |
255 | add esi,[base] ; loadp+18*3+3*150*34+68 |
259 | 256 | ||
- | 257 | mov eax, [width] |
|
- | 258 | shl eax, 1 ; *2 |
|
- | 259 | mov ecx, [height_move] ;? |
|
260 | mov ecx,70 |
260 | |
261 | mario_1l: |
261 | .new_line: |
262 | pusha |
262 | pusha |
263 | mov ecx,[width_move] |
263 | mov ecx,[width_move] |
- | 264 | ||
264 | putpix: |
265 | .putpix: ; set 4 pixel: edi, edi+3, edi+width, edi+width+3 |
265 | mov eax,[esi] |
266 | mov eax,[esi] |
266 | mov [edi+00],ax |
267 | mov [edi+00],ax |
267 | mov [edi+03],ax |
268 | mov [edi+03],ax |
268 | mov ebx,[width] |
269 | mov ebx,[width] |
269 | mov [edi+ebx],ax |
270 | mov [edi+ebx],ax |
270 | add ebx,3 |
271 | add ebx,3 |
271 | mov [edi+ebx],ax |
272 | mov [edi+ebx],ax |
272 | shr eax,16 |
273 | shr eax,16 |
273 | mov [edi+02],al |
274 | mov [edi+02],al |
274 | dec ebx |
275 | dec ebx |
275 | mov [edi+ebx],al |
276 | mov [edi+ebx],al |
276 | mov [edi+05],al |
277 | mov [edi+05],al |
277 | add ebx,3 |
278 | add ebx,3 |
278 | mov [edi+ebx],al |
279 | mov [edi+ebx],al |
279 | add esi,3 |
280 | add esi,3 |
280 | add edi,6 |
281 | add edi,6 |
281 | loop putpix |
282 | loop .putpix |
282 | popa |
283 | popa |
- | 284 | ||
283 | sub esi,[sub_esi] |
285 | sub esi,res_line_size |
284 | add edi,[add_edi] |
286 | add edi, eax |
285 | loop mario_1l |
287 | loop .new_line |
286 | 288 | ||
287 | ret |
289 | ret |
288 | 290 | ||
289 | sub_esi dd 0x0 |
291 | imul_esi dd 0 |
290 | add_edi dd 0x0 |
- | |
291 | imul_esi dd 0x0 |
292 | base dd 0 |
292 | base dd 0x0 |
293 | width dd 0 |
293 | width dd 0x0 |
294 | width_move dd 0 |
294 | width_move dd 0x0 |
295 | height_move dd 0 |
295 | 296 | ||
296 | 297 | ||
297 | 298 | ||
298 | mario_mirror: |
299 | mario_mirror: |
299 | - | ||
300 | 300 | ||
301 | ; mario_green |
- | |
302 | 301 | ; mario_green |
|
303 | mov edi,mario_green |
302 | mov edi,mario_green |
304 | mov ecx,70*50 |
303 | mov ecx, mario_count_pixel |
305 | mario_greenl: |
304 | @@: |
306 | mov [edi],dword 0x00500f |
305 | mov [edi],dword 0x00500f |
307 | add edi,3 |
306 | add edi, 3 |
308 | loop mario_greenl |
- | |
309 | - | ||
310 | 307 | loop @b |
|
311 | 308 | ||
312 | ; mario_4 |
309 | ; mario_4 - reverse mario_1 |
313 | 310 | ||
314 | mov edi,mario_4 |
311 | mov edi, mario_4 |
315 | mov esi,mario_1+49*3 |
312 | mov esi, mario_1 + (mario_width - 1)*3 |
316 | mov ecx,70 |
313 | mov ecx, mario_height |
317 | m4l1: |
314 | m4l1: |
318 | pusha |
315 | pusha |
319 | mov ecx,50 |
316 | mov ecx, mario_width |
320 | m4l2: |
317 | m4l2: |
321 | mov eax,[esi] |
318 | mov eax,[esi] |
322 | mov [edi],ax |
319 | mov [edi],ax |
323 | shr eax,16 |
320 | shr eax,16 |
324 | mov [edi+2],al |
321 | mov [edi+2],al |
325 | add edi,3 |
322 | add edi,3 |
326 | sub esi,3 |
323 | sub esi,3 |
327 | loop m4l2 |
324 | loop m4l2 |
328 | popa |
325 | popa |
- | 326 | ||
329 | add esi,50*3 |
327 | add esi, mario_width*3 |
330 | add edi,50*3 |
328 | add edi, mario_width*3 |
331 | loop m4l1 |
329 | loop m4l1 |
332 | 330 | ||
333 | 331 | ||
334 | ; mario_5 |
332 | ; mario_5 - reverse mario_2 |
335 | 333 | ||
336 | mov edi,mario_5 |
334 | mov edi, mario_5 |
337 | mov esi,mario_2+49*3 |
335 | mov esi, mario_2 + (mario_width - 1)*3 |
338 | mov ecx,70 |
336 | mov ecx, mario_height |
339 | m5l1: |
337 | m5l1: |
340 | pusha |
338 | pusha |
341 | mov ecx,50 |
339 | mov ecx, mario_width |
342 | m5l2: |
340 | m5l2: |
343 | mov eax,[esi] |
341 | mov eax,[esi] |
344 | mov [edi],ax |
342 | mov [edi],ax |
345 | shr eax,16 |
343 | shr eax,16 |
346 | mov [edi+2],al |
344 | mov [edi+2],al |
347 | add edi,3 |
345 | add edi,3 |
348 | sub esi,3 |
346 | sub esi,3 |
349 | loop m5l2 |
347 | loop m5l2 |
350 | popa |
348 | popa |
- | 349 | ||
351 | add esi,50*3 |
350 | add esi, mario_width*3 |
352 | add edi,50*3 |
351 | add edi, mario_width*3 |
353 | loop m5l1 |
352 | loop m5l1 |
354 | 353 | ||
355 | 354 | ||
356 | ; mario_6 |
355 | ; mario_6 - reverse mario_3 |
357 | 356 | ||
358 | mov edi,mario_6 |
357 | mov edi, mario_6 |
359 | mov esi,mario_3+49*3 |
358 | mov esi, mario_3 + (mario_width - 1)*3 |
360 | mov ecx,70 |
359 | mov ecx, mario_height |
361 | m6l1: |
360 | m6l1: |
362 | pusha |
361 | pusha |
363 | mov ecx,50 |
362 | mov ecx, mario_width |
364 | m6l2: |
363 | m6l2: |
365 | mov eax,[esi] |
364 | mov eax,[esi] |
366 | mov [edi],ax |
365 | mov [edi],ax |
367 | shr eax,16 |
366 | shr eax,16 |
368 | mov [edi+2],al |
367 | mov [edi+2],al |
369 | add edi,3 |
368 | add edi,3 |
370 | sub esi,3 |
369 | sub esi,3 |
371 | loop m6l2 |
370 | loop m6l2 |
372 | popa |
371 | popa |
- | 372 | ||
373 | add esi,50*3 |
373 | add esi, mario_width*3 |
374 | add edi,50*3 |
374 | add edi, mario_width*3 |
375 | loop m6l1 |
375 | loop m6l1 |
376 | 376 | ||
377 | 377 | ||
378 | popa |
378 | popa |
379 | - | ||
380 | ret |
379 | ret |
381 | 380 | ||
382 | 381 | ||
383 | 382 | ||
384 | advance_mario: |
383 | advance_mario: |
385 | 384 | ||
386 | pusha |
385 | pusha |
387 | 386 | ||
388 | mov eax,[marioxy] ; wherey ? |
387 | mov eax,[marioxy] ; wherey ? |
389 | and eax,65535 |
388 | and eax,65535 |
390 | add eax,40+21 |
389 | add eax,40+21 |
391 | xor edx,edx |
390 | xor edx,edx |
392 | mov ebx,40 |
391 | mov ebx,40 |
393 | div ebx |
392 | div ebx |
394 | mov [marioy],eax |
393 | mov [marioy],eax |
395 | 394 | ||
396 | mov eax,[marioxy] ; wherex ? |
395 | mov eax,[marioxy] ; wherex ? |
397 | shr eax,16 |
396 | shr eax,16 |
398 | add eax,20 |
397 | add eax,20 |
399 | xor edx,edx |
398 | xor edx,edx |
400 | mov ebx,40 |
399 | mov ebx,40 |
401 | div ebx |
400 | div ebx |
402 | mov [mariox],eax |
401 | mov [mariox],eax |
403 | 402 | ||
404 | 403 | ||
405 | 404 | ||
406 | cmp byte [leftright],byte 1 ; go left |
405 | cmp byte [leftright],byte 1 ; go left |
407 | jnz noleft |
406 | jnz noleft |
408 | mov eax,[marioxy] |
407 | mov eax,[marioxy] |
409 | xor edx,edx |
408 | xor edx,edx |
410 | shr eax,16 |
409 | shr eax,16 |
411 | sub eax,7 |
410 | sub eax,7 |
412 | mov ebx,40 |
411 | mov ebx,40 |
413 | div ebx |
412 | div ebx |
414 | add eax,field+7*12 |
413 | add eax,field+7*12 |
415 | cmp [eax],byte ' ' |
414 | cmp [eax],byte ' ' |
416 | jz mgoleft |
415 | jz mgoleft |
417 | mov byte [leftright],byte 2 |
416 | mov byte [leftright],byte 2 |
418 | jmp noleft |
417 | jmp noleft |
419 | mgoleft: |
418 | mgoleft: |
420 | mov eax,[marioxy] |
419 | mov eax,[marioxy] |
421 | sub eax,6*65536 |
420 | sub eax,6*65536 |
422 | mov [marioxy],eax |
421 | mov [marioxy],eax |
423 | noleft: |
422 | noleft: |
424 | 423 | ||
425 | 424 | ||
426 | 425 | ||
427 | cmp byte [leftright],byte 4 ; go right |
426 | cmp byte [leftright],byte 4 ; go right |
428 | jnz noright |
427 | jnz noright |
429 | mov eax,[marioxy] |
428 | mov eax,[marioxy] |
430 | xor edx,edx |
429 | xor edx,edx |
431 | shr eax,16 |
430 | shr eax,16 |
432 | add eax,54 |
431 | add eax,54 |
433 | mov ebx,40 |
432 | mov ebx,40 |
434 | div ebx |
433 | div ebx |
435 | add eax,field+7*12 |
434 | add eax,field+7*12 |
436 | cmp byte [eax],byte ' ' |
435 | cmp byte [eax],byte ' ' |
437 | jz mgoright |
436 | jz mgoright |
438 | mov byte [leftright],byte 3 |
437 | mov byte [leftright],byte 3 |
439 | jmp noright |
438 | jmp noright |
440 | mgoright: |
439 | mgoright: |
441 | mov eax,[marioxy] |
440 | mov eax,[marioxy] |
442 | add eax,6*65536 |
441 | add eax,6*65536 |
443 | mov [marioxy],eax |
442 | mov [marioxy],eax |
444 | noright: |
443 | noright: |
445 | 444 | ||
446 | 445 | ||
447 | 446 | ||
448 | 447 | ||
449 | cmp [velocity],dword 0x100 ; jump up ? |
448 | cmp [velocity],dword 0x100 ; jump up ? |
450 | jbe nojumpup |
449 | jbe nojumpup |
451 | mov ebx,[velocity] |
450 | mov ebx,[velocity] |
452 | sub ebx,1 |
451 | sub ebx,1 |
453 | cmp ebx,0x100 |
452 | cmp ebx,0x100 |
454 | jnz no0x100 |
453 | jnz no0x100 |
455 | mov [velocity],dword 0xff |
454 | mov [velocity],dword 0xff |
456 | jmp nojumpup |
455 | jmp nojumpup |
457 | no0x100: |
456 | no0x100: |
458 | mov [velocity],ebx |
457 | mov [velocity],ebx |
459 | sub ebx,0x100-1 |
458 | sub ebx,0x100-1 |
460 | mov eax,[marioxy] |
459 | mov eax,[marioxy] |
461 | sub ax,bx |
460 | sub ax,bx |
462 | mov [marioxy],eax |
461 | mov [marioxy],eax |
463 | nojumpup: |
462 | nojumpup: |
464 | 463 | ||
465 | call mario_environment |
464 | call mario_environment |
466 | 465 | ||
467 | cmp [velocity],dword 0x100 ; jump -> down ? |
466 | cmp [velocity],dword 0x100 ; jump -> down ? |
468 | jge nojumpdown |
467 | jge nojumpdown |
469 | mov eax,[marioy] |
468 | mov eax,[marioy] |
470 | cmp eax,[mario_below] |
469 | cmp eax,[mario_below] |
471 | jb yesgd |
470 | jb yesgd |
472 | mov [velocity],dword 0xff |
471 | mov [velocity],dword 0xff |
473 | mov eax,[marioxy] |
472 | mov eax,[marioxy] |
474 | mov eax,[mario_below] |
473 | mov eax,[mario_below] |
475 | sub eax,1 |
474 | sub eax,1 |
476 | mov ebx,40 |
475 | mov ebx,40 |
477 | mul ebx |
476 | mul ebx |
478 | sub eax,10 |
477 | sub eax,10 |
479 | mov word [marioxy],ax |
478 | mov word [marioxy],ax |
480 | jmp nojumpdown |
479 | jmp nojumpdown |
481 | yesgd: |
480 | yesgd: |
482 | mov ebx,[velocity] |
481 | mov ebx,[velocity] |
483 | sub ebx,1 |
482 | sub ebx,1 |
484 | mov [velocity],ebx |
483 | mov [velocity],ebx |
485 | mov eax,[marioxy] |
484 | mov eax,[marioxy] |
486 | add ax,0xff |
485 | add ax,0xff |
487 | sub ax,bx |
486 | sub ax,bx |
488 | mov [marioxy],eax |
487 | mov [marioxy],eax |
489 | nojumpdown: |
488 | nojumpdown: |
490 | 489 | ||
491 | 490 | ||
492 | popa |
491 | popa |
493 | 492 | ||
494 | ret |
493 | ret |
495 | 494 | ||
496 | 495 | ||
497 | marioy dd 0x0 |
496 | marioy dd 0x0 |
498 | 497 | ||
499 | mariox dd 0x0 |
498 | mariox dd 0x0 |
500 | 499 | ||
501 | mario_below dd 5 |
500 | mario_below dd 5 |
502 | 501 | ||
503 | 502 | ||
504 | mario_environment: |
503 | mario_environment: |
505 | 504 | ||
506 | pusha |
505 | pusha |
507 | 506 | ||
508 | mov eax,[marioy] |
507 | mov eax,[marioy] |
509 | mov ebx,12 |
508 | mov ebx,12 |
510 | mul ebx |
509 | mul ebx |
511 | add eax,[mariox] |
510 | add eax,[mariox] |
512 | add eax,field |
511 | add eax,field |
513 | 512 | ||
514 | cmp [eax],byte ' ' |
513 | cmp [eax],byte ' ' |
515 | jz me_ok |
514 | jz me_ok |
516 | 515 | ||
517 | mov eax,[marioy] |
516 | mov eax,[marioy] |
518 | mov [mario_below],eax |
517 | mov [mario_below],eax |
519 | 518 | ||
520 | popa |
519 | popa |
521 | ret |
520 | ret |
522 | 521 | ||
523 | me_ok: |
522 | me_ok: |
524 | 523 | ||
525 | mov [mario_below],dword 100 |
524 | mov [mario_below],dword 100 |
526 | 525 | ||
527 | popa |
526 | popa |
528 | ret |
527 | ret |
529 | 528 | ||
530 | 529 | ||
531 | mario_delay: |
530 | mario_delay: |
532 | 531 | ||
533 | pusha |
532 | pusha |
534 | 533 | ||
535 | mov eax,5 ;pause |
534 | mov eax,5 ;pause |
536 | mov ebx,2 |
535 | mov ebx,2 |
537 | int 0x40 |
536 | int 0x40 |
538 | 537 | ||
539 | popa |
538 | popa |
540 | ret |
539 | ret |
541 | 540 | ||
542 | 541 | ||
543 | 542 | ||
544 | draw_mario: |
543 | draw_mario: |
545 | 544 | ||
546 | pusha |
545 | pusha |
547 | 546 | ||
548 | mov eax,[mariomem] |
547 | mov eax,[mariomem] |
549 | cmp eax,[marioxy] |
548 | cmp eax,[marioxy] |
550 | jnz dm1 |
549 | jnz @f |
551 | 550 | ||
552 | call mario_delay |
551 | call mario_delay |
553 | 552 | ||
554 | popa |
553 | popa |
555 | - | ||
556 | ret |
554 | ret |
557 | 555 | ||
558 | dm1: |
- | |
559 | 556 | @@: |
|
560 | mov eax,[marioxy] |
557 | mov eax,[marioxy] |
561 | mov [mariomem],eax |
558 | mov [mariomem],eax |
562 | 559 | ||
563 | 560 | ||
564 | cmp byte [leftright],byte 1 ; go left |
- | |
565 | jnz no_m_left |
561 | cmp byte [leftright], 1 ; go left |
566 | jmp m_left |
- | |
567 | no_m_left: |
562 | jz m_left |
568 | - | ||
569 | cmp byte [leftright],byte 4 ; go right |
563 | |
570 | jnz no_m_right |
- | |
571 | jmp m_right |
564 | cmp byte [leftright], 4 ; go right |
572 | no_m_right: |
565 | jz m_right |
- | 566 | ||
573 | 567 | cmp byte [leftright], 2 ; stand left |
|
574 | cmp byte [leftright],byte 2 ; stand left |
568 | jnz no_r_still |
575 | jnz no_r_still |
569 | |
576 | mov eax,7 |
570 | mov eax,7 |
577 | mov ebx,mario_green |
571 | mov ebx,mario_green |
- | 572 | mov ecx, mario_draw_size |
|
578 | mov ecx,50*65536+70 |
573 | mov edx,[marioxy] |
579 | mov edx,[marioxy] |
574 | int 0x40 |
580 | int 0x40 |
575 | |
581 | call advance_mario |
576 | call advance_mario |
582 | mov eax,7 |
577 | mov eax,7 |
583 | mov ebx,mario_1 |
578 | mov ebx,mario_1 |
584 | mov ecx,50*65536+70 |
579 | mov ecx, mario_draw_size |
585 | mov edx,[marioxy] |
580 | mov edx,[marioxy] |
586 | int 0x40 |
581 | int 0x40 |
- | 582 | ||
587 | call mario_delay |
583 | call mario_delay |
- | 584 | ||
588 | popa |
585 | popa |
589 | ret |
586 | ret |
590 | no_r_still: |
- | |
- | 587 | ||
591 | 588 | no_r_still: |
|
592 | cmp byte [leftright],byte 3 ; stand right |
589 | cmp byte [leftright],byte 3 ; stand right |
- | 590 | jnz no_l_still |
|
593 | jnz no_l_still |
591 | |
594 | mov eax,7 |
592 | mov eax,7 |
595 | mov ebx,mario_green |
593 | mov ebx,mario_green |
596 | mov ecx,50*65536+70 |
594 | mov ecx, mario_draw_size |
597 | mov edx,[marioxy] |
595 | mov edx,[marioxy] |
- | 596 | int 0x40 |
|
598 | int 0x40 |
597 | |
599 | call advance_mario |
598 | call advance_mario |
600 | mov eax,7 |
599 | mov eax,7 |
601 | mov ebx,mario_4 |
600 | mov ebx,mario_4 |
602 | mov ecx,50*65536+70 |
601 | mov ecx, mario_draw_size |
603 | mov edx,[marioxy] |
602 | mov edx,[marioxy] |
604 | int 0x40 |
603 | int 0x40 |
- | 604 | ||
605 | call mario_delay |
605 | call mario_delay |
606 | - | ||
607 | popa |
- | |
608 | ret |
606 | |
609 | no_l_still: |
607 | no_l_still: |
610 | 608 | ||
611 | popa |
609 | popa |
612 | ret |
610 | ret |
613 | - | ||
614 | - | ||
615 | - | ||
616 | 611 | ||
617 | m_left: |
612 | m_left: |
618 | 613 | ||
619 | mov eax,7 |
614 | mov eax,7 |
620 | mov ebx,mario_green |
615 | mov ebx,mario_green |
621 | mov ecx,50*65536+70 |
616 | mov ecx, mario_draw_size |
622 | mov edx,[marioxy] |
617 | mov edx,[marioxy] |
623 | int 0x40 |
618 | int 0x40 |
- | 619 | ||
624 | call advance_mario |
620 | call advance_mario |
625 | mov eax,7 |
621 | mov eax,7 |
626 | mov ebx,mario_1 |
622 | mov ebx,mario_1 |
627 | mov ecx,50*65536+70 |
623 | mov ecx, mario_draw_size |
628 | mov edx,[marioxy] |
624 | mov edx,[marioxy] |
629 | int 0x40 |
625 | int 0x40 |
- | 626 | ||
630 | call mario_delay |
627 | call mario_delay |
631 | 628 | ||
632 | mov eax,7 |
629 | mov eax,7 |
633 | mov ebx,mario_green |
630 | mov ebx,mario_green |
634 | mov ecx,50*65536+70 |
631 | mov ecx, mario_draw_size |
635 | mov edx,[marioxy] |
632 | mov edx,[marioxy] |
636 | int 0x40 |
633 | int 0x40 |
- | 634 | ||
637 | call advance_mario |
635 | call advance_mario |
638 | mov eax,7 |
636 | mov eax,7 |
639 | mov ebx,mario_2 |
637 | mov ebx,mario_2 |
640 | mov ecx,50*65536+70 |
638 | mov ecx, mario_draw_size |
641 | mov edx,[marioxy] |
639 | mov edx,[marioxy] |
642 | int 0x40 |
640 | int 0x40 |
- | 641 | ||
643 | call mario_delay |
642 | call mario_delay |
644 | 643 | ||
645 | mov eax,7 |
644 | mov eax,7 |
646 | mov ebx,mario_green |
645 | mov ebx,mario_green |
647 | mov ecx,50*65536+70 |
646 | mov ecx, mario_draw_size |
648 | mov edx,[marioxy] |
647 | mov edx,[marioxy] |
649 | int 0x40 |
648 | int 0x40 |
- | 649 | ||
650 | call advance_mario |
650 | call advance_mario |
651 | mov eax,7 |
651 | mov eax,7 |
652 | mov ebx,mario_3 |
652 | mov ebx,mario_3 |
653 | mov ecx,50*65536+70 |
653 | mov ecx, mario_draw_size |
654 | mov edx,[marioxy] |
654 | mov edx,[marioxy] |
655 | int 0x40 |
655 | int 0x40 |
- | 656 | ||
656 | call mario_delay |
657 | call mario_delay |
657 | 658 | ||
658 | mov eax,7 |
659 | mov eax,7 |
659 | mov ebx,mario_green |
660 | mov ebx,mario_green |
660 | mov ecx,50*65536+70 |
661 | mov ecx, mario_draw_size |
661 | mov edx,[marioxy] |
662 | mov edx,[marioxy] |
662 | int 0x40 |
663 | int 0x40 |
- | 664 | ||
663 | call advance_mario |
665 | call advance_mario |
664 | mov eax,7 |
666 | mov eax,7 |
665 | mov ebx,mario_2 |
667 | mov ebx,mario_2 |
666 | mov ecx,50*65536+70 |
668 | mov ecx, mario_draw_size |
667 | mov edx,[marioxy] |
669 | mov edx,[marioxy] |
668 | int 0x40 |
670 | int 0x40 |
- | 671 | ||
669 | call mario_delay |
672 | call mario_delay |
670 | 673 | ||
671 | popa |
674 | popa |
672 | - | ||
673 | ret |
675 | ret |
674 | 676 | ||
675 | m_right: |
677 | m_right: |
676 | 678 | ||
677 | 679 | ||
678 | mov eax,7 |
680 | mov eax,7 |
679 | mov ebx,mario_green |
681 | mov ebx,mario_green |
680 | mov ecx,50*65536+70 |
682 | mov ecx, mario_draw_size |
681 | mov edx,[marioxy] |
683 | mov edx,[marioxy] |
682 | int 0x40 |
684 | int 0x40 |
- | 685 | ||
683 | call advance_mario |
686 | call advance_mario |
684 | mov eax,7 |
687 | mov eax,7 |
685 | mov ebx,mario_4 |
688 | mov ebx,mario_4 |
686 | mov ecx,50*65536+70 |
689 | mov ecx, mario_draw_size |
687 | mov edx,[marioxy] |
690 | mov edx,[marioxy] |
688 | int 0x40 |
691 | int 0x40 |
- | 692 | ||
689 | call mario_delay |
693 | call mario_delay |
690 | 694 | ||
691 | mov eax,7 |
695 | mov eax,7 |
692 | mov ebx,mario_green |
696 | mov ebx,mario_green |
693 | mov ecx,50*65536+70 |
697 | mov ecx, mario_draw_size |
694 | mov edx,[marioxy] |
698 | mov edx,[marioxy] |
695 | int 0x40 |
699 | int 0x40 |
- | 700 | ||
696 | call advance_mario |
701 | call advance_mario |
697 | mov eax,7 |
702 | mov eax,7 |
698 | mov ebx,mario_5 |
703 | mov ebx,mario_5 |
699 | mov ecx,50*65536+70 |
704 | mov ecx, mario_draw_size |
700 | mov edx,[marioxy] |
705 | mov edx,[marioxy] |
701 | int 0x40 |
706 | int 0x40 |
- | 707 | ||
702 | call mario_delay |
708 | call mario_delay |
703 | 709 | ||
704 | mov eax,7 |
710 | mov eax,7 |
705 | mov ebx,mario_green |
711 | mov ebx,mario_green |
706 | mov ecx,50*65536+70 |
712 | mov ecx, mario_draw_size |
707 | mov edx,[marioxy] |
713 | mov edx,[marioxy] |
708 | int 0x40 |
714 | int 0x40 |
- | 715 | ||
709 | call advance_mario |
716 | call advance_mario |
710 | mov eax,7 |
717 | mov eax,7 |
711 | mov ebx,mario_6 |
718 | mov ebx,mario_6 |
712 | mov ecx,50*65536+70 |
719 | mov ecx, mario_draw_size |
713 | mov edx,[marioxy] |
720 | mov edx,[marioxy] |
714 | int 0x40 |
721 | int 0x40 |
- | 722 | ||
715 | call mario_delay |
723 | call mario_delay |
716 | 724 | ||
717 | mov eax,7 |
725 | mov eax,7 |
718 | mov ebx,mario_green |
726 | mov ebx,mario_green |
719 | mov ecx,50*65536+70 |
727 | mov ecx, mario_draw_size |
720 | mov edx,[marioxy] |
728 | mov edx,[marioxy] |
721 | int 0x40 |
729 | int 0x40 |
- | 730 | ||
722 | call advance_mario |
731 | call advance_mario |
723 | mov eax,7 |
732 | mov eax,7 |
724 | mov ebx,mario_5 |
733 | mov ebx,mario_5 |
725 | mov ecx,50*65536+70 |
734 | mov ecx, mario_draw_size |
726 | mov edx,[marioxy] |
735 | mov edx,[marioxy] |
727 | int 0x40 |
736 | int 0x40 |
- | 737 | ||
728 | call mario_delay |
738 | call mario_delay |
729 | 739 | ||
730 | popa |
740 | popa |
731 | - | ||
732 | ret |
741 | ret |
733 | - | ||
734 | - | ||
735 | - | ||
736 | - | ||
737 | 742 | ||
738 | draw_window: |
743 | draw_window: |
739 | 744 | ||
740 | pusha |
745 | pusha |
741 | 746 | ||
742 | mov eax,12 ; tell os about redraw |
747 | mov eax,12 ; tell os about redraw |
743 | mov ebx,1 |
748 | mov ebx,1 |
744 | int 0x40 |
749 | int 0x40 |
745 | 750 | ||
746 | mov eax,0 ; define and draw window |
751 | mov eax,0 ; define and draw window |
747 | mov ebx,80*65536+480+1 |
752 | mov ebx, (wnd_pos_x shl 16) + wnd_width ;80*65536+480+1 |
748 | mov ecx,20*65536+382 |
753 | mov ecx, (wnd_pos_y shl 16) + wnd_height ;20*65536+382 |
749 | mov edx,0x5466AA88 |
754 | mov edx,0x5466AA88 ; 4 type window + title + no draw work space |
750 | mov edi,title |
755 | mov edi,title |
751 | int 0x40 |
756 | int 0x40 |
752 | 757 | ||
753 | mov eax,12 ; tell os about redraw end |
758 | mov eax,12 ; tell os about redraw end |
754 | mov ebx,2 |
759 | mov ebx,2 |
755 | int 0x40 |
760 | int 0x40 |
756 | 761 | ||
757 | popa |
762 | popa |
758 | 763 | ||
759 | ret |
764 | ret |
760 | 765 | ||
761 | 766 | ||
762 | ; DATA SECTION |
767 | ; DATA SECTION |
763 | - | ||
764 | filename: |
- | |
765 | db 'MARIOALLBMP' |
- | |
766 | 768 | ||
767 | title: |
769 | title: |
768 | db 'SUPER MARIO - USE ARROW KEYS', 0 |
770 | db 'SUPER MARIO - USE ARROW KEYS', 0 |
769 | 771 | ||
770 | field: |
772 | field: |
771 | 773 | ||
772 | db '1 1' |
774 | db '1 1' |
773 | db '1 1' |
775 | db '1 1' |
774 | db '111 111' |
776 | db '111 111' |
775 | db '1 1' |
777 | db '1 1' |
776 | db '1 1' |
778 | db '1 1' |
777 | db '1 111111 1' |
779 | db '1 111111 1' |
778 | db '1 1' |
780 | db '1 1' |
779 | db '1 1' |
781 | db '1 1' |
780 | db '222222222222' |
782 | db '222222222222' |
- | 783 | .end: |
|
781 | 784 | ||
782 | xxyy dd 0x0 |
785 | xxyy dd 0x0 |
783 | 786 | ||
784 | marioxy dd 0x0 |
787 | marioxy dd 0x0 |
785 | 788 | ||
786 | mariomem dd 0x0 |
789 | mariomem dd 0x0 |
787 | 790 | ||
788 | leftright dd 0x0 |
791 | leftright dd 0x0 |
789 | 792 | ||
790 | velocity dd 0x0 |
793 | velocity dd 0x0 |
- | 794 | ||
- | 795 | align 16 |
|
- | 796 | loadp: |
|
791 | 797 | file 'MARIOALL.BMP' |
|
792 | 798 | ||
793 | I_END:-> |
799 | I_END: |
- | 800 | ||
- | 801 | align 0x1000 |
|
- | 802 | ||
- | 803 | empty: rb block_img_size |
|
- | 804 | build_1: rb block_img_size |
|
- | 805 | build_2: rb block_img_size |
|
- | 806 | build_3: rb block_img_size |
|
- | 807 | ||
- | 808 | align 0x1000 |
|
- | 809 | ||
- | 810 | mario_1: rb mario_img_size |
|
- | 811 | mario_2: rb mario_img_size |
|
- | 812 | mario_3: rb mario_img_size |
|
- | 813 | mario_4: rb mario_img_size |
|
- | 814 | mario_5: rb mario_img_size |
|
- | 815 | mario_6: rb mario_img_size |
|
- | 816 | mario_green: rb mario_img_size |
|
- | 817 | ||
- | 818 | ||
- | 819 | rb 4096 |
|
- | 820 | STACKTOP: |
|
- | 821 | MEM:-> |