Subversion Repositories Kolibri OS

Rev

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: