Subversion Repositories Kolibri OS

Rev

Rev 4609 | Only display areas with differences | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 4609 Rev 6166
1
; Date : 1st April 2001
1
; Date : 1st April 2001
2
; TETRIS for MENUET
2
; TETRIS for MENUET
3
; Author : Paolo Minazzi (email paolo.minazzi@inwind.it)
3
; Author : Paolo Minazzi (email paolo.minazzi@inwind.it)
4
;
4
;
5
; -Note-
5
; -Note-
6
; 1. This program requires a PENTIUM or higher because uses the RDTSC
6
; 1. This program requires a PENTIUM or higher because uses the RDTSC
7
;    instrucion for get a random number.
7
;    instrucion for get a random number.
8
; 2. You must use NASM to compile. Compiling is OK with NASM 0.98, I
8
; 2. You must use NASM to compile. Compiling is OK with NASM 0.98, I
9
;    don't know what happen with other versions.
9
;    don't know what happen with other versions.
10
; 3. You must use the arrow key to move and rotate a block.
10
; 3. You must use the arrow key to move and rotate a block.
11
; 4. In the near future there will be a new version of TETRIS. This is
11
; 4. In the near future there will be a new version of TETRIS. This is
12
;    only the beginning.
12
;    only the beginning.
13
;
13
;
14
; Thanks to Ville, the author of this wonderful OS !
14
; Thanks to Ville, the author of this wonderful OS !
15
; Join with us to code !
15
; Join with us to code !
16
;
16
;
17
;
17
;
18
; Changelog:
18
; Changelog:
19
; 30.12.2007 - cleaning keybuffer before reading an key - Gluk
19
; 30.12.2007 - cleaning keybuffer before reading an key - Gluk
20
; 09.11.2005 - fix for work under MeosDebug & better random - Andrey Halyavin
20
; 09.11.2005 - fix for work under MeosDebug & better random - Andrey Halyavin
21
; 23.09.2005 - fixed bug, when 011111111111111-like sequence interpreted
21
; 23.09.2005 - fixed bug, when 011111111111111-like sequence interpreted
22
;              as _11111111111111 in check_full_line - Sergey Kuzmin aka Wildwest
22
;              as _11111111111111 in check_full_line - Sergey Kuzmin aka Wildwest
23
; 18.09.2005 - added 'Pause' button and made appropriate code and interface redesign
23
; 18.09.2005 - added 'Pause' button and made appropriate code and interface redesign
24
;              BTW, you can MOVE and ROTATE block during Pause ;)  - Sergey Kuzmin aka Wildwest
24
;              BTW, you can MOVE and ROTATE block during Pause ;)  - Sergey Kuzmin aka Wildwest
25
; 03.11.2003 - added new blocks & random - Ivan Poddubny
25
; 03.11.2003 - added new blocks & random - Ivan Poddubny
26
; 31.10.2001 - rdtsc replaced            - quickcode 
26
; 31.10.2001 - rdtsc replaced            - quickcode 
27
; 28.06.2001 - fasm port & framed blocks - Ville Turjanmaa
27
; 28.06.2001 - fasm port & framed blocks - Ville Turjanmaa
28
; 
28
; 
29
;
-
 
30
 
29
 
31
LEN_X equ 19  ;width of table
30
LEN_X equ 19  ;width of table
32
LEN_Y equ 29  ; height of table
31
LEN_Y equ 29  ; height of table
33
BORDER_LEFT equ 1
32
BORDER_LEFT equ 1
34
BORDER_RIGHT equ 1
33
BORDER_RIGHT equ 1
35
BORDER_TOP equ 1
34
BORDER_TOP equ 1
36
BORDER_BOTTOM equ 1
35
BORDER_BOTTOM equ 1
37
ADOBE_SIZE equ 12
36
ADOBE_SIZE equ 12
38
 
37
 
39
X_LOCATION equ 30 ; distance to table from left side
38
X_LOCATION equ 30 ; distance to table from left side
40
Y_LOCATION equ 50 ; distance to table from header 
39
Y_LOCATION equ 50 ; distance to table from header 
41
 
40
 
42
UP_KEY equ 130+48
41
UP_KEY equ 130+48
43
DOWN_KEY equ 129+48
42
DOWN_KEY equ 129+48
44
LEFT_KEY equ 128+48
43
LEFT_KEY equ 128+48
45
RIGHT_KEY equ 131+48
44
RIGHT_KEY equ 131+48
46
;BACKGROUND equ 03000080h
45
;BACKGROUND equ 03000080h
47
 
46
 
48
_MAXBLOCKS_ = 7*4
47
_MAXBLOCKS_ = 7*4
49
 
48
 
50
use32
49
use32
51
 
50
 
52
                org     0x0
51
                org     0x0
53
 
52
 
54
                db      'MENUET01'    ; 8 byte id
53
                db      'MENUET01'    ; 8 byte id
55
                dd      0x01          ; header version
54
                dd      0x01          ; header version
56
                dd      START         ; program start
55
                dd      START         ; program start
57
                dd      I_END         ; program image size
56
                dd      I_END         ; program image size
58
                dd      I_END+1024    ; reguired amount of memory
57
                dd      I_END+1024    ; reguired amount of memory
59
                dd      I_END+1024    ; esp
58
                dd      I_END+1024    ; esp
60
                dd      0x0,0x0       ; I_PARAM, I_ICON
59
                dd      0x0,0x0       ; I_PARAM, I_ICON
61
include 'lang.inc'
60
include 'lang.inc'
62
include '../../../macros.inc'
61
include '../../../macros.inc'
63
 
62
 
64
START:                          ; start of execution
63
START:                          ; start of execution
65
 
64
 
66
 
65
 
67
    ; --  quickcode - start
66
    ; --  quickcode - start
68
 
67
 
69
    mov   eax,3
68
    mov   eax,3
70
    int   0x40
69
    int   0x40
71
    mov   cl,16
70
    mov   cl,16
72
    ror   eax,cl ; to make seconds more significant
71
    ror   eax,cl ; to make seconds more significant
73
    mov   [generator],eax
72
    mov   [generator],eax
74
    call  random
73
    call  random
75
 
74
 
76
    ; --  quickcode - end
75
    ; --  quickcode - end
77
 
76
 
78
 
77
 
79
    call clear_table_tetris
78
    call clear_table_tetris
80
    call new_block
79
    call new_block
81
    call draw_window            ; at first, draw the window
80
    call draw_window            ; at first, draw the window
82
 
81
 
83
still:
82
still:
84
    xor  edx,edx
83
    xor  edx,edx
85
    call draw_block
84
    call draw_block
86
 
85
 
87
attesa:
86
attesa:
88
 
87
 
89
    mov  eax,11                 ; get event
88
    mov  eax,11                 ; get event
90
    int  0x40
89
    int  0x40
91
 
90
 
92
    cmp  eax,1                  ; redraw request ?
91
    cmp  eax,1                  ; redraw request ?
93
    jz   red
92
    jz   red
94
    cmp  eax,2                  ; key in buffer ?
93
    cmp  eax,2                  ; key in buffer ?
95
    jnz  check_button
94
    jnz  check_button
96
    jmp  key
95
    jmp  key
97
check_button:
96
check_button:
98
    cmp  eax,3                  ; button in buffer ?
97
    cmp  eax,3                  ; button in buffer ?
99
    jnz  scendi
98
    jnz  scendi
100
    jmp  button
99
    jmp  button
101
 
100
 
102
  red:                          ; redraw
101
  red:                          ; redraw
103
    call draw_window
102
    call draw_window
104
    jmp  still
103
    jmp  still
105
 
104
 
106
 
105
 
107
 
106
 
108
scendi:
107
scendi:
109
;///////////////////////////////////////////////// Wildwest
108
;///////////////////////////////////////////////// Wildwest
110
                 cmp dword [pauses], 0
109
                 cmp dword [pauses], 0
111
                 je ok
110
                 je ok
112
                 jne not_ok
111
                 jne not_ok
113
not_ok:  
112
not_ok:  
114
                inc   dword [current_block_y]
113
                inc   dword [current_block_y]
115
                dec  dword [current_block_y]
114
                dec  dword [current_block_y]
116
                call  check_crash
115
                call  check_crash
117
                jne   block_crash
116
                jne   block_crash
118
                jmp draw            
117
                jmp draw            
119
ok:  
118
ok:  
120
 ;/////////////////////////////////////////////////  
119
 ;/////////////////////////////////////////////////  
121
                inc   dword [current_block_y]
120
                inc   dword [current_block_y]
122
                call  check_crash
121
                call  check_crash
123
                jne   block_crash
122
                jne   block_crash
124
draw:           movzx edx,byte [current_block_color]
123
draw:           movzx edx,byte [current_block_color]
125
                call  draw_block
124
                call  draw_block
126
                mov   eax,5
125
                mov   eax,5
127
                movzx ebx,byte [delay]
126
                movzx ebx,byte [delay]
128
                int   0x40
127
                int   0x40
129
                mov   [force_down],	1
128
                mov   [force_down],	1
130
                jmp   still
129
                jmp   still
131
 
130
 
132
block_crash:    dec dword [current_block_y]
131
block_crash:    dec dword [current_block_y]
133
                movzx edx,byte [current_block_color]
132
                movzx edx,byte [current_block_color]
134
                call draw_block
133
                call draw_block
135
                call fix_block
134
                call fix_block
136
                call check_full_line
135
                call check_full_line
137
                call draw_table
136
                call draw_table
138
                call new_block
137
                call new_block
139
                inc dword [score]
138
                inc dword [score]
140
                call write_score
139
                call write_score
141
                call check_crash
140
                call check_crash
142
                jz adr400
141
                jz adr400
143
aspetta:        mov eax,10
142
aspetta:        mov eax,10
144
                int 0x40
143
                int 0x40
145
                cmp eax,1
144
                cmp eax,1
146
                jne adr10000
145
                jne adr10000
147
                call draw_window
146
                call draw_window
148
adr10000:       cmp eax,3
147
adr10000:       cmp eax,3
149
                jne aspetta
148
                jne aspetta
150
new_game:       mov eax,17
149
new_game:       mov eax,17
151
                int 0x40
150
                int 0x40
152
                cmp ah,1
151
                cmp ah,1
153
                jnz adr401
152
                jnz adr401
154
                jmp end_program
153
                jmp end_program
155
adr401:      
154
adr401:      
156
;///////////////////////////////////////////////////// Wildwest
155
;///////////////////////////////////////////////////// Wildwest
157
                mov dword [pauses], 0   
156
                mov dword [pauses], 0   
158
;////////////////////////////////////////////////////
157
;////////////////////////////////////////////////////
159
                mov dword [score],0
158
                mov dword [score],0
160
                call clear_table_tetris
159
                call clear_table_tetris
161
                call new_block
160
                call new_block
162
                call draw_window
161
                call draw_window
163
 
162
 
164
adr400:         movzx edx,byte [current_block_color]
163
adr400:         movzx edx,byte [current_block_color]
165
                call draw_block
164
                call draw_block
166
                mov eax,5
165
                mov eax,5
167
                movzx ebx,byte [delay]
166
                movzx ebx,byte [delay]
168
                int 0x40
167
                int 0x40
169
                jmp still
168
                jmp still
170
 
169
 
171
key:            mov  eax,2 ; Gluk
170
key:            mov  eax,2 ; Gluk
172
                int  0x40
171
                int  0x40
173
				cmp eax,1
172
				cmp eax,1
174
				jne getkeyi
173
				jne getkeyi
175
				mov ah,dh
174
				mov ah,dh
176
				jmp adr32
175
				jmp adr32
177
 
176
 
178
getkeyi:		mov dh,ah ; Gluk
177
getkeyi:		mov dh,ah ; Gluk
179
				jmp key
178
				jmp key
180
 
179
 
181
adr32:          cmp [pauses], 1 ; If game is paused, disable all actions
180
adr32:          cmp [pauses], 1 ; If game is paused, disable all actions
182
                je scendi
181
                je scendi
183
                cmp ah,LEFT_KEY
182
                cmp ah,LEFT_KEY
184
                jne adr_30
183
                jne adr_30
185
                dec dword [current_block_x]
184
                dec dword [current_block_x]
186
                call check_crash
185
                call check_crash
187
                jz adr4000
186
                jz adr4000
188
                inc dword [current_block_x]
187
                inc dword [current_block_x]
189
adr4000:        jmp scendi
188
adr4000:        jmp scendi
190
 
189
 
191
adr_30:         cmp ah,RIGHT_KEY
190
adr_30:         cmp ah,RIGHT_KEY
192
                jne adr_31
191
                jne adr_31
193
                inc dword [current_block_x]
192
                inc dword [current_block_x]
194
                call check_crash
193
                call check_crash
195
                jz adr3000
194
                jz adr3000
196
                dec dword [current_block_x]
195
                dec dword [current_block_x]
197
adr3000:        jmp scendi
196
adr3000:        jmp scendi
198
 
197
 
199
adr_31:         cmp ah,UP_KEY
198
adr_31:         cmp ah,UP_KEY
200
                jne adr51
199
                jne adr51
201
                mov edx,[current_block_pointer]
200
                mov edx,[current_block_pointer]
202
                mov edx,[edx+16]
201
                mov edx,[edx+16]
203
                mov esi,[current_block_pointer]
202
                mov esi,[current_block_pointer]
204
                mov [current_block_pointer],edx
203
                mov [current_block_pointer],edx
205
                call check_crash
204
                call check_crash
206
                jz adr50
205
                jz adr50
207
                mov [current_block_pointer],esi
206
                mov [current_block_pointer],esi
208
adr50:          jmp scendi
207
adr50:          jmp scendi
209
 
208
 
210
adr51:          cmp ah,DOWN_KEY
209
adr51:          cmp ah,DOWN_KEY
211
                jne adr61
210
                jne adr61
212
                cmp [force_down], 1
211
                cmp [force_down], 1
213
                 jne scendi
212
                 jne scendi
214
                mov byte [delay],5  ;!!! 2
213
                mov byte [delay],5  ;!!! 2
215
adr52:          jmp scendi
214
adr52:          jmp scendi
216
 
215
 
217
adr61:          cmp ah,' '
216
adr61:          cmp ah,' '
218
                jne adr62
217
                jne adr62
219
                cmp [force_down], 1
218
                cmp [force_down], 1
220
                 jne scendi
219
                 jne scendi
221
                mov byte [delay],5  ;!!! 2
220
                mov byte [delay],5  ;!!! 2
222
adr62:          jmp scendi
221
adr62:          jmp scendi
223
 
222
 
224
 
223
 
225
button:                       ; button
224
button:                       ; button
226
    mov  eax,17
225
    mov  eax,17
227
    int  0x40
226
    int  0x40
228
    cmp  ah,1                   ; button id=1 ?
227
    cmp  ah,1                   ; button id=1 ?
229
    jz  end_program
228
    jz  end_program
230
    cmp ah,2
229
    cmp ah,2
231
    jz go_new_game
230
    jz go_new_game
232
    cmp  ah,3                   ; button id=3 ? ///Wildwest's  'Pause' button
231
    cmp  ah,3                   ; button id=3 ? ///Wildwest's  'Pause' button
233
    jz  pause_program
232
    jz  pause_program
234
    jmp still
233
    jmp still
235
 
234
 
236
end_program:
235
end_program:
237
    or   eax,-1                ; close this program
236
    or   eax,-1                ; close this program
238
    int  0x40
237
    int  0x40
239
 
238
 
240
go_new_game:
239
go_new_game:
241
    jmp new_game
240
    jmp new_game
242
;//////////////////////////////////////////////////// Wildwest
241
;//////////////////////////////////////////////////// Wildwest
243
pause_program:
242
pause_program:
244
cmp dword [pauses], 0
243
cmp dword [pauses], 0
245
je incr
244
je incr
246
mov dword [pauses], 0
245
mov dword [pauses], 0
247
 jmp still
246
 jmp still
248
incr:
247
incr:
249
mov dword [pauses], 1
248
mov dword [pauses], 1
250
jmp still
249
jmp still
251
;////////////////////////////////////////////////////
250
;////////////////////////////////////////////////////
252
;   *********************************************
251
;   *********************************************
253
;   *******  WINDOW DEFINITIONS AND DRAW ********
252
;   *******  WINDOW DEFINITIONS AND DRAW ********
254
;   *********************************************
253
;   *********************************************
255
draw_window:
254
draw_window:
256
 
-
 
257
 
-
 
258
    mov  eax,48
-
 
259
    mov  ebx,3
-
 
260
    mov  ecx,sc
255
 
261
    mov  edx,sizeof.system_colors
-
 
262
    int  0x40
-
 
263
 
-
 
264
    mov  eax,12                    ; function 12:tell os about windowdraw
-
 
265
    mov  ebx,1                     ; 1, start of draw
256
  mcall 48,3,sc,sizeof.system_colors
266
    int  0x40
-
 
267
 
257
  mcall 12,1
268
                                 ; DRAW WINDOW
258
  ; DRAW WINDOW
269
  xor  eax,eax                   ; function 0 : define and draw window
259
  xor  eax,eax                   ; function 0 : define and draw window
270
  mov  ebx,320*65536+(LEN_X-BORDER_LEFT-BORDER_RIGHT)*ADOBE_SIZE+X_LOCATION*2
260
  mov  ebx,320*65536+(LEN_X-BORDER_LEFT-BORDER_RIGHT)*ADOBE_SIZE+X_LOCATION*2
271
  mov  ecx,25*65536+ (LEN_Y-BORDER_TOP-BORDER_BOTTOM)*ADOBE_SIZE+Y_LOCATION+30
261
  mov  ecx,25*65536+ (LEN_Y-BORDER_TOP-BORDER_BOTTOM)*ADOBE_SIZE+Y_LOCATION+36
272
  mov  edx,[sc.work]             ; color of work area RRGGBB
262
  mov  edx,[sc.work]             ; color of work area RRGGBB
273
  or   edx,0x13000000
263
  or   edx,0x13000000
274
  mov  edi,title                 ; WINDOW LABEL
264
  mov  edi,title                 ; WINDOW LABEL
275
  int  0x40
265
  int  0x40
276
 
-
 
277
                                    
-
 
278
    mov eax,8
266
 
279
    mov ebx,30*65536+100
-
 
280
    mov ecx,378*65536+18
-
 
281
    mov edx,2
267
    mcall 8, 30*65536+100,378*65536+22,2,[sc.work_button] ;new game
282
    mov esi,[sc.work_button]
-
 
283
    int 0x40
268
	mcall  ,132*65536+102,            ,3 ;Wildwest's  'Pause' button
284
;/////////////////////////////////////////////// Wildwest's  'Pause' button
-
 
285
    ;mov eax,8
-
 
286
    mov ebx,132*65536+102
-
 
287
    mov ecx,378*65536+18
-
 
288
    mov edx,3
-
 
289
    mov esi,[sc.work_button];
-
 
290
    int 0x40
269
;///////////////////////////////////////////////
291
 
270
 
292
    mov  eax,4                      ; function 4 : write text to window
271
    mov  eax,4                      ; function 4 : write text to window
293
    mov  ebx,164*65536+384          ; [x start] *65536 + [y start]
272
    mov  ebx,164*65536+383          ; [x start] *65536 + [y start]
294
    mov  ecx,[sc.work_button_text]  ; color of text RRGGBB
273
    mov  ecx,[sc.work_button_text]  ; color of text RRGGBB
295
    or   ecx,0x90000000
274
    or   ecx,0x90000000
296
    mov  edx,labe                   ; pointer to text
275
    mov  edx,labe                   ; pointer to text
297
    int  0x40
276
    int  0x40
298
;///////////////////////////////////////////////
277
;///////////////////////////////////////////////
299
    ;mov eax,4
278
    ;mov eax,4
300
    mov ebx,49*65536+384
279
    mov ebx,49*65536+383
301
    mov edx,game_finished
280
    mov edx,game_finished
302
    int 0x40
281
    int 0x40
303
    call draw_table
282
    call draw_table
304
 
283
 
305
    movzx edx,byte [current_block_color]
284
    movzx edx,byte [current_block_color]
306
    call draw_block
285
    call draw_block
307
 
286
 
308
    cld
287
    cld
309
    mov  ebx,38*65536+35           ; draw info text with function 4
288
    mov  ebx,38*65536+32           ; draw info text with function 4
310
    mov  ecx,[sc.work_text]              ; color
289
    mov  ecx,[sc.work_text]              ; color
311
    or   ecx,0x90000000    
290
    or   ecx,0x90000000    
312
    mov  edx,text
291
    mov  edx,text
313
    mov  eax,4
292
    mov  eax,4
314
    int  0x40
293
    int  0x40
315
 
294
 
316
    call write_score
295
    call write_score
317
 
296
 
318
    mov  eax,12                    ; function 12:tell os about windowdraw
297
    mov  eax,12                    ; function 12:tell os about windowdraw
319
    mov  ebx,2                     ; 2, end of draw
298
    mov  ebx,2                     ; 2, end of draw
320
    int  0x40
299
    int  0x40
321
 
300
 
322
    ret
301
    ret
323
 
302
 
324
;-------------------------------------------------------------
303
;-------------------------------------------------------------
325
; CHECK CRASH
304
; CHECK CRASH
326
; output        Z  flag => OK
305
; output        Z  flag => OK
327
;               NZ flag => NO
306
;               NZ flag => NO
328
;-------------------------------------------------------------
307
;-------------------------------------------------------------
329
 
308
 
330
check_crash:    mov ebx,[current_block_pointer]
309
check_crash:    mov ebx,[current_block_pointer]
331
 
310
 
332
                mov edx,[current_block_y]
311
                mov edx,[current_block_y]
333
                imul edx,LEN_X
312
                imul edx,LEN_X
334
                add edx,[current_block_x]          ;find the offset in tetris_t
313
                add edx,[current_block_x]          ;find the offset in tetris_t
335
 
314
 
336
                add edx,table_tetris
315
                add edx,table_tetris
337
 
316
 
338
                mov ecx,4
317
                mov ecx,4
339
                xor ax,ax
318
                xor ax,ax
340
 
319
 
341
adr_1:          cmp byte [ebx],1
320
adr_1:          cmp byte [ebx],1
342
                jne adr_2
321
                jne adr_2
343
                add al,[edx]
322
                add al,[edx]
344
                adc ah,0
323
                adc ah,0
345
adr_2:          inc ebx
324
adr_2:          inc ebx
346
                inc edx
325
                inc edx
347
 
326
 
348
                cmp byte [ebx],1
327
                cmp byte [ebx],1
349
                jne adr_3
328
                jne adr_3
350
                add al,[edx]
329
                add al,[edx]
351
                adc ah,0
330
                adc ah,0
352
adr_3:          inc ebx
331
adr_3:          inc ebx
353
                inc edx
332
                inc edx
354
 
333
 
355
                cmp byte [ebx],1
334
                cmp byte [ebx],1
356
                jne adr_4
335
                jne adr_4
357
                add al,[edx]
336
                add al,[edx]
358
                adc ah,0
337
                adc ah,0
359
adr_4:          inc ebx
338
adr_4:          inc ebx
360
                inc edx
339
                inc edx
361
 
340
 
362
                cmp byte [ebx],1
341
                cmp byte [ebx],1
363
                jne adr_5
342
                jne adr_5
364
                add al,[edx]
343
                add al,[edx]
365
                adc ah,0
344
                adc ah,0
366
adr_5:          inc ebx
345
adr_5:          inc ebx
367
                add edx,LEN_X-3
346
                add edx,LEN_X-3
368
 
347
 
369
                loop adr_1
348
                loop adr_1
370
                or ax,ax
349
                or ax,ax
371
                ret
350
                ret
372
;-------------------------------------------------------------
351
;-------------------------------------------------------------
373
;NEW BLOCK
352
;NEW BLOCK
374
;-------------------------------------------------------------
353
;-------------------------------------------------------------
375
new_block:      mov dword [current_block_y],1
354
new_block:      mov dword [current_block_y],1
376
                mov dword [current_block_x],7
355
                mov dword [current_block_x],7
377
 
356
 
378
				mov   [force_down],	0				; allow fast falling _after_ first game step
357
				mov   [force_down],	0				; allow fast falling _after_ first game step
379
 
358
 
380
                call random
359
                call random
381
                and al,7
360
                and al,7
382
                setz ah
361
                setz ah
383
                add al,ah
362
                add al,ah
384
                mov [current_block_color],al
363
                mov [current_block_color],al
385
 
364
 
386
                call random
365
                call random
387
                ;and eax,15
366
                ;and eax,15
388
            ; ---- Ivan ----
367
            ; ---- Ivan ----
389
                and eax,0xff
368
                and eax,0xff
390
              @@:
369
              @@:
391
                cmp eax,_MAXBLOCKS_
370
                cmp eax,_MAXBLOCKS_
392
                jl  @f
371
                jl  @f
393
                add eax,-(_MAXBLOCKS_)
372
                add eax,-(_MAXBLOCKS_)
394
                jmp @b
373
                jmp @b
395
              @@:
374
              @@:
396
            ; ---- Ivan ----
375
            ; ---- Ivan ----
397
                mov edx,[block_table+eax*4]
376
                mov edx,[block_table+eax*4]
398
                mov [current_block_pointer],edx
377
                mov [current_block_pointer],edx
399
 
378
 
400
                mov byte [delay],22 ;19 ;!!! 15
379
                mov byte [delay],22 ;19 ;!!! 15
401
                ret
380
                ret
402
;-------------------------------------------------------------
381
;-------------------------------------------------------------
403
; FIX BLOCK
382
; FIX BLOCK
404
;-------------------------------------------------------------
383
;-------------------------------------------------------------
405
fix_block:      mov ebx,[current_block_pointer]
384
fix_block:      mov ebx,[current_block_pointer]
406
 
385
 
407
                mov edx,[current_block_y]
386
                mov edx,[current_block_y]
408
                imul edx,LEN_X
387
                imul edx,LEN_X
409
                add edx,[current_block_x]       ;find the offset in tetris_t
388
                add edx,[current_block_x]       ;find the offset in tetris_t
410
 
389
 
411
                add edx,table_tetris
390
                add edx,table_tetris
412
 
391
 
413
                mov ecx,4
392
                mov ecx,4
414
                mov al,[current_block_color]
393
                mov al,[current_block_color]
415
 
394
 
416
adr_21:         cmp byte [ebx],1
395
adr_21:         cmp byte [ebx],1
417
                jne adr_22
396
                jne adr_22
418
                mov [edx],al
397
                mov [edx],al
419
adr_22:         inc ebx
398
adr_22:         inc ebx
420
                inc edx
399
                inc edx
421
 
400
 
422
                cmp byte [ebx],1
401
                cmp byte [ebx],1
423
                jne adr_23
402
                jne adr_23
424
                mov [edx],al
403
                mov [edx],al
425
adr_23:         inc ebx
404
adr_23:         inc ebx
426
                inc edx
405
                inc edx
427
 
406
 
428
                cmp byte [ebx],1
407
                cmp byte [ebx],1
429
                jne adr_24
408
                jne adr_24
430
                mov [edx],al
409
                mov [edx],al
431
adr_24:         inc ebx
410
adr_24:         inc ebx
432
                inc edx
411
                inc edx
433
 
412
 
434
                cmp byte [ebx],1
413
                cmp byte [ebx],1
435
                jne adr_25
414
                jne adr_25
436
                mov [edx],al
415
                mov [edx],al
437
adr_25:         inc ebx
416
adr_25:         inc ebx
438
                add edx,LEN_X-3
417
                add edx,LEN_X-3
439
 
418
 
440
                loop adr_21
419
                loop adr_21
441
                ret
420
                ret
442
 
421
 
443
;--------------------------------------------------------------
422
;--------------------------------------------------------------
444
; DRAW_TABLE
423
; DRAW_TABLE
445
;--------------------------------------------------------------
424
;--------------------------------------------------------------
446
draw_table:     mov esi,table_tetris+LEN_X*BORDER_TOP+BORDER_LEFT
425
draw_table:     mov esi,table_tetris+LEN_X*BORDER_TOP+BORDER_LEFT
447
 
426
 
448
                mov ebx,X_LOCATION*65536+ADOBE_SIZE
427
                mov ebx,X_LOCATION*65536+ADOBE_SIZE
449
                mov ecx,Y_LOCATION*65536+ADOBE_SIZE
428
                mov ecx,Y_LOCATION*65536+ADOBE_SIZE
450
                mov edi,LEN_Y-BORDER_TOP-BORDER_BOTTOM
429
                mov edi,LEN_Y-BORDER_TOP-BORDER_BOTTOM
451
y_draw:         push edi
430
y_draw:         push edi
452
 
431
 
453
                mov edi,LEN_X-BORDER_LEFT-BORDER_RIGHT
432
                mov edi,LEN_X-BORDER_LEFT-BORDER_RIGHT
454
x_draw:         push edi
433
x_draw:         push edi
455
              ;  pusha
434
              ;  pusha
456
              ;  mov eax,5
435
              ;  mov eax,5
457
              ;  mov ebx,10
436
              ;  mov ebx,10
458
              ;  int 0x40
437
              ;  int 0x40
459
              ;  popa
438
              ;  popa
460
                mov eax,13
439
                mov eax,13
461
                movzx edx,byte [esi]
440
                movzx edx,byte [esi]
462
                mov edx,[color_table+edx*4]
441
                mov edx,[color_table+edx*4]
463
                int 0x40
442
                int 0x40
464
                call draw_frames
443
                call draw_frames
465
                inc esi
444
                inc esi
466
                add ebx,65536*ADOBE_SIZE
445
                add ebx,65536*ADOBE_SIZE
467
                pop edi
446
                pop edi
468
                dec edi
447
                dec edi
469
                jnz x_draw
448
                jnz x_draw
470
 
449
 
471
                add esi,BORDER_LEFT+BORDER_RIGHT
450
                add esi,BORDER_LEFT+BORDER_RIGHT
472
                mov ebx,X_LOCATION*65536+ADOBE_SIZE
451
                mov ebx,X_LOCATION*65536+ADOBE_SIZE
473
                add ecx,65536*ADOBE_SIZE
452
                add ecx,65536*ADOBE_SIZE
474
                pop edi
453
                pop edi
475
                dec edi
454
                dec edi
476
                jnz y_draw
455
                jnz y_draw
477
 
456
 
478
                ret
457
                ret
479
;--------------------------------------------------------------
458
;--------------------------------------------------------------
480
;DRAW BLOCK
459
;DRAW BLOCK
481
;
460
;
482
; ebx=x [0..LEN_X-1]
461
; ebx=x [0..LEN_X-1]
483
; ecx=y [0..LEN_Y-1]
462
; ecx=y [0..LEN_Y-1]
484
; edi=pointer block
463
; edi=pointer block
485
;--------------------------------------------------------------
464
;--------------------------------------------------------------
486
draw_block: 
465
draw_block: 
487
              
466
              
488
                mov eax,13
467
                mov eax,13
489
                mov edx,[color_table+edx*4]
468
                mov edx,[color_table+edx*4]
490
 
469
 
491
                mov ebx,[current_block_x]
470
                mov ebx,[current_block_x]
492
                mov ecx,[current_block_y]
471
                mov ecx,[current_block_y]
493
                mov edi,[current_block_pointer]
472
                mov edi,[current_block_pointer]
494
 
473
 
495
                sub ebx,BORDER_LEFT
474
                sub ebx,BORDER_LEFT
496
                imul ebx,ADOBE_SIZE
475
                imul ebx,ADOBE_SIZE
497
                add ebx,X_LOCATION
476
                add ebx,X_LOCATION
498
                shl ebx,16
477
                shl ebx,16
499
                mov bx,ADOBE_SIZE
478
                mov bx,ADOBE_SIZE
500
 
479
 
501
                sub ecx,BORDER_TOP
480
                sub ecx,BORDER_TOP
502
                imul ecx,ADOBE_SIZE
481
                imul ecx,ADOBE_SIZE
503
                add ecx,Y_LOCATION
482
                add ecx,Y_LOCATION
504
                shl ecx,16
483
                shl ecx,16
505
                mov cx,ADOBE_SIZE
484
                mov cx,ADOBE_SIZE
506
 
485
 
507
                mov dword [TMP_1],4
486
                mov dword [TMP_1],4
508
adr_122:        mov dword [TMP_0],4
487
adr_122:        mov dword [TMP_0],4
509
adr_121:        cmp byte [edi],0
488
adr_121:        cmp byte [edi],0
510
                je adr_120
489
                je adr_120
511
 
490
 
512
                int 040h
491
                int 040h
513
 
492
 
514
                call draw_frames
493
                call draw_frames
515
 
494
 
516
adr_120:        inc edi
495
adr_120:        inc edi
517
                add ebx,ADOBE_SIZE*65536
496
                add ebx,ADOBE_SIZE*65536
518
                dec dword [TMP_0]
497
                dec dword [TMP_0]
519
                jnz adr_121
498
                jnz adr_121
520
                sub ebx,4*ADOBE_SIZE*65536
499
                sub ebx,4*ADOBE_SIZE*65536
521
                add ecx,ADOBE_SIZE*65536
500
                add ecx,ADOBE_SIZE*65536
522
                dec dword [TMP_1]
501
                dec dword [TMP_1]
523
                jnz adr_122
502
                jnz adr_122
524
 
503
 
525
                ret
504
                ret
526
 
505
 
527
draw_frames:
506
draw_frames:
528
                 cmp edx,0
507
                 cmp edx,0
529
                 jne df1
508
                 jne df1
530
                 ret
509
                 ret
531
             df1:
510
             df1:
532
                 pusha
511
                 pusha
533
                 mov bx,1
512
                 mov bx,1
534
                 add edx,0x282828
513
                 add edx,0x282828
535
                 mov eax,13
514
                 mov eax,13
536
                 int 0x40
515
                 int 0x40
537
                 popa
516
                 popa
538
 
517
 
539
                 pusha
518
                 pusha
540
                 mov cx,1
519
                 mov cx,1
541
                 add edx,0x282828
520
                 add edx,0x282828
542
                 mov eax,13
521
                 mov eax,13
543
                 int 0x40
522
                 int 0x40
544
                 popa
523
                 popa
545
 
524
 
546
                 pusha
525
                 pusha
547
                 push ebx
526
                 push ebx
548
                 sub  bx,1
527
                 sub  bx,1
549
                 add  [esp+2],bx
528
                 add  [esp+2],bx
550
                 pop  ebx
529
                 pop  ebx
551
                 mov  bx,1
530
                 mov  bx,1
552
                 shr  edx,1
531
                 shr  edx,1
553
                 and  edx,0x7f7f7f
532
                 and  edx,0x7f7f7f
554
                 mov  eax,13
533
                 mov  eax,13
555
                 int  0x40
534
                 int  0x40
556
                 popa
535
                 popa
557
 
536
 
558
                 pusha
537
                 pusha
559
                 push ecx
538
                 push ecx
560
                 sub  cx,1
539
                 sub  cx,1
561
                 add  [esp+2],cx
540
                 add  [esp+2],cx
562
                 pop  ecx
541
                 pop  ecx
563
                 mov  cx,1
542
                 mov  cx,1
564
                 shr  edx,1
543
                 shr  edx,1
565
                 and  edx,0x7f7f7f
544
                 and  edx,0x7f7f7f
566
                 mov  eax,13
545
                 mov  eax,13
567
                 int  0x40
546
                 int  0x40
568
                 popa
547
                 popa
569
 
548
 
570
                 ret
549
                 ret
571
 
550
 
572
 
551
 
573
;--------------------------------------------------------------
552
;--------------------------------------------------------------
574
clear_table_tetris:
553
clear_table_tetris:
575
                cld
554
                cld
576
                mov al,1
555
                mov al,1
577
                mov edi,table_tetris
556
                mov edi,table_tetris
578
                mov ecx,LEN_X*BORDER_TOP
557
                mov ecx,LEN_X*BORDER_TOP
579
                rep stosb
558
                rep stosb
580
 
559
 
581
                mov edx,LEN_Y-BORDER_TOP-BORDER_BOTTOM
560
                mov edx,LEN_Y-BORDER_TOP-BORDER_BOTTOM
582
adr300:         mov cl,BORDER_LEFT
561
adr300:         mov cl,BORDER_LEFT
583
                rep stosb
562
                rep stosb
584
                dec ax  ;AL=0
563
                dec ax  ;AL=0
585
                mov cl,LEN_X-BORDER_LEFT-BORDER_RIGHT
564
                mov cl,LEN_X-BORDER_LEFT-BORDER_RIGHT
586
                rep stosb
565
                rep stosb
587
                inc ax  ;AL=1
566
                inc ax  ;AL=1
588
                mov cl,BORDER_RIGHT
567
                mov cl,BORDER_RIGHT
589
                rep stosb
568
                rep stosb
590
                dec dx
569
                dec dx
591
                jne adr300
570
                jne adr300
592
 
571
 
593
                mov ecx,LEN_X*BORDER_BOTTOM
572
                mov ecx,LEN_X*BORDER_BOTTOM
594
                rep stosb
573
                rep stosb
595
                ret
574
                ret
596
;--------------------------------------------------------------
575
;--------------------------------------------------------------
597
;edx = pointer
576
;edx = pointer
598
;ebx = contatore
577
;ebx = contatore
599
check_full_line:
578
check_full_line:
600
                std
579
                std
601
                mov al,0
580
                mov al,0
602
                mov edx,table_tetris+LEN_X*(LEN_Y-BORDER_BOTTOM)-1
581
                mov edx,table_tetris+LEN_X*(LEN_Y-BORDER_BOTTOM)-1
603
                mov ebx,(LEN_Y-BORDER_TOP-BORDER_BOTTOM-1)*LEN_X
582
                mov ebx,(LEN_Y-BORDER_TOP-BORDER_BOTTOM-1)*LEN_X
604
 
583
 
605
adr_5000:       mov edi,edx
584
adr_5000:       mov edi,edx
606
                mov ecx,LEN_X-BORDER_LEFT-BORDER_RIGHT+1;Wildwest's fix for bug 
585
                mov ecx,LEN_X-BORDER_LEFT-BORDER_RIGHT+1;Wildwest's fix for bug 
607
                                 ;(was LEN_X-BORDER_LEFT-BORDER_RIGHT)
586
                                 ;(was LEN_X-BORDER_LEFT-BORDER_RIGHT)
608
                repne scasb
587
                repne scasb
609
                jz no_full_line
588
                jz no_full_line
610
 
589
 
611
                lea esi,[edx-LEN_X]
590
                lea esi,[edx-LEN_X]
612
                mov edi,edx
591
                mov edi,edx
613
                mov ecx,ebx
592
                mov ecx,ebx
614
                rep movsb
593
                rep movsb
615
                sub edi,BORDER_RIGHT
594
                sub edi,BORDER_RIGHT
616
                mov ecx,LEN_X-BORDER_LEFT-BORDER_RIGHT
595
                mov ecx,LEN_X-BORDER_LEFT-BORDER_RIGHT
617
                rep stosb
596
                rep stosb
618
                add dword [score],50
597
                add dword [score],50
619
                jmp adr_5000
598
                jmp adr_5000
620
 
599
 
621
no_full_line:   sub edx,LEN_X
600
no_full_line:   sub edx,LEN_X
622
                sub ebx,LEN_X
601
                sub ebx,LEN_X
623
                jnz adr_5000
602
                jnz adr_5000
624
 
603
 
625
                ret
604
                ret
626
;--------------------------------------------------------------
605
;--------------------------------------------------------------
627
random:         mov eax,[generator]
606
random:         mov eax,[generator]
628
                add eax,-43ab45b5h
607
                add eax,-43ab45b5h
629
                ror eax,1
608
                ror eax,1
630
                xor eax,32c4324fh
609
                xor eax,32c4324fh
631
                ror eax,1
610
                ror eax,1
632
                mov [generator],eax
611
                mov [generator],eax
633
                ; --- IVAN ---
612
                ; --- IVAN ---
634
                push ebx
613
                push ebx
635
                mov eax,26
614
                mov eax,26
636
                mov ebx,9
615
                mov ebx,9
637
                int 0x40
616
                int 0x40
638
                pop ebx
617
                pop ebx
639
                xor eax,0xdeadbeef
618
                xor eax,0xdeadbeef
640
                add eax,[generator]
619
                add eax,[generator]
641
                ; --- IVAN ---
620
                ; --- IVAN ---
642
                mov [generator],eax ; Halyavin
621
                mov [generator],eax ; Halyavin
643
                ret
622
                ret
644
;--------------------------------------------------------------
623
;--------------------------------------------------------------
645
number_to_str:  mov edi,end_number_str-1
624
number_to_str:  mov edi,end_number_str-1
646
                mov ecx,9;size_of_number_str
625
                mov ecx,9;size_of_number_str
647
                mov ebx,10
626
                mov ebx,10
648
                cld
627
                cld
649
new_digit:      xor edx,edx
628
new_digit:      xor edx,edx
650
                div ebx
629
                div ebx
651
                add dl,'0'
630
                add dl,'0'
652
                mov [edi],dl
631
                mov [edi],dl
653
                dec edi
632
                dec edi
654
                loop new_digit
633
                loop new_digit
655
                ret
634
                ret
656
;--------------------------------------------------------------
635
;--------------------------------------------------------------
657
write_score:
636
write_score:
658
    mov  eax,[score]
637
    mov  eax,[score]
659
    call number_to_str
638
    call number_to_str
660
 
639
 
661
    mov  ebx,90*65536+35          ; draw info text with function 4
640
    mov  ebx,90*65536+32          ; draw info text with function 4
662
    mov  ecx,[sc.work_text]        ; color
641
    mov  ecx,[sc.work_text]        ; color
663
    or   ecx,0x50000000    
642
    or   ecx,0x50000000    
664
    mov  edx,number_str
643
    mov  edx,number_str
665
    mov  esi,[size_of_number_str]
644
    mov  esi,[size_of_number_str]
666
    mov  edi,[sc.work]
645
    mov  edi,[sc.work]
667
    mov  eax,4
646
    mov  eax,4
668
    int  0x40
647
    int  0x40
669
    ret
648
    ret
670
 
649
 
671
; DATA AREA
650
; DATA AREA
672
 
651
 
673
;--------------------------------------------------------------
652
;--------------------------------------------------------------
674
;DEFINITION BLOCKS
653
;DEFINITION BLOCKS
675
;--------------------------------------------------------------
654
;--------------------------------------------------------------
676
t_block_0:  db 0,0,0,0
655
t_block_0:  db 0,0,0,0
677
                db 1,1,1,0
656
                db 1,1,1,0
678
                db 0,1,0,0
657
                db 0,1,0,0
679
                db 0,0,0,0
658
                db 0,0,0,0
680
                dd t_block_3
659
                dd t_block_3
681
 
660
 
682
t_block_1:  db 0,1,0,0
661
t_block_1:  db 0,1,0,0
683
                db 1,1,0,0
662
                db 1,1,0,0
684
                db 0,1,0,0
663
                db 0,1,0,0
685
                db 0,0,0,0
664
                db 0,0,0,0
686
                dd t_block_0
665
                dd t_block_0
687
 
666
 
688
t_block_2:  db 0,1,0,0
667
t_block_2:  db 0,1,0,0
689
                db 1,1,1,0
668
                db 1,1,1,0
690
                db 0,0,0,0
669
                db 0,0,0,0
691
                db 0,0,0,0
670
                db 0,0,0,0
692
                dd t_block_1
671
                dd t_block_1
693
 
672
 
694
t_block_3   db 0,1,0,0
673
t_block_3   db 0,1,0,0
695
                db 0,1,1,0
674
                db 0,1,1,0
696
                db 0,1,0,0
675
                db 0,1,0,0
697
                db 0,0,0,0
676
                db 0,0,0,0
698
                dd t_block_2
677
                dd t_block_2
699
;--------------------------------------------------------------
678
;--------------------------------------------------------------
700
i_block_0:  db 0,1,0,0
679
i_block_0:  db 0,1,0,0
701
                db 0,1,0,0
680
                db 0,1,0,0
702
                db 0,1,0,0
681
                db 0,1,0,0
703
                db 0,1,0,0
682
                db 0,1,0,0
704
                dd i_block_1
683
                dd i_block_1
705
 
684
 
706
i_block_1:  db 0,0,0,0
685
i_block_1:  db 0,0,0,0
707
                db 1,1,1,1
686
                db 1,1,1,1
708
                db 0,0,0,0
687
                db 0,0,0,0
709
                db 0,0,0,0
688
                db 0,0,0,0
710
                dd i_block_0
689
                dd i_block_0
711
;--------------------------------------------------------------
690
;--------------------------------------------------------------
712
q_block_0: db 0,1,1,0
691
q_block_0: db 0,1,1,0
713
                db 0,1,1,0
692
                db 0,1,1,0
714
                db 0,0,0,0
693
                db 0,0,0,0
715
                db 0,0,0,0
694
                db 0,0,0,0
716
                dd q_block_0
695
                dd q_block_0
717
;--------------------------------------------------------------
696
;--------------------------------------------------------------
718
s_block_0:
697
s_block_0:
719
      db 0,0,0,0
698
      db 0,0,0,0
720
      db 0,1,1,0
699
      db 0,1,1,0
721
      db 1,1,0,0
700
      db 1,1,0,0
722
      db 0,0,0,0
701
      db 0,0,0,0
723
      dd s_block_1
702
      dd s_block_1
724
 
703
 
725
s_block_1: db 1,0,0,0
704
s_block_1: db 1,0,0,0
726
                db 1,1,0,0
705
                db 1,1,0,0
727
                db 0,1,0,0
706
                db 0,1,0,0
728
                db 0,0,0,0
707
                db 0,0,0,0
729
                dd s_block_0
708
                dd s_block_0
730
;--------------------------------------------------------------
709
;--------------------------------------------------------------
731
l_block_0:  db 0,0,0,0
710
l_block_0:  db 0,0,0,0
732
                db 1,1,1,0
711
                db 1,1,1,0
733
                db 1,0,0,0
712
                db 1,0,0,0
734
                db 0,0,0,0
713
                db 0,0,0,0
735
                dd l_block_3
714
                dd l_block_3
736
 
715
 
737
l_block_1:  db 1,1,0,0
716
l_block_1:  db 1,1,0,0
738
                db 0,1,0,0
717
                db 0,1,0,0
739
                db 0,1,0,0
718
                db 0,1,0,0
740
                db 0,0,0,0
719
                db 0,0,0,0
741
                dd l_block_0
720
                dd l_block_0
742
 
721
 
743
l_block_2:  db 0,0,1,0
722
l_block_2:  db 0,0,1,0
744
                db 1,1,1,0
723
                db 1,1,1,0
745
                db 0,0,0,0
724
                db 0,0,0,0
746
                db 0,0,0,0
725
                db 0,0,0,0
747
                dd l_block_1
726
                dd l_block_1
748
 
727
 
749
l_block_3:  db 0,1,0,0
728
l_block_3:  db 0,1,0,0
750
                db 0,1,0,0
729
                db 0,1,0,0
751
                db 0,1,1,0
730
                db 0,1,1,0
752
                db 0,0,0,0
731
                db 0,0,0,0
753
                dd l_block_2
732
                dd l_block_2
754
;-----------------------------------------------
733
;-----------------------------------------------
755
 
734
 
756
g_block_0:
735
g_block_0:
757
 
736
 
758
db 0,1,0,0
737
db 0,1,0,0
759
db 0,1,0,0
738
db 0,1,0,0
760
db 1,1,0,0
739
db 1,1,0,0
761
db 0,0,0,0
740
db 0,0,0,0
762
dd g_block_1
741
dd g_block_1
763
 
742
 
764
g_block_1:
743
g_block_1:
765
db 0,0,0,0
744
db 0,0,0,0
766
db 1,1,1,0
745
db 1,1,1,0
767
db 0,0,1,0
746
db 0,0,1,0
768
db 0,0,0,0
747
db 0,0,0,0
769
dd g_block_2
748
dd g_block_2
770
 
749
 
771
g_block_2:
750
g_block_2:
772
db 0,1,1,0
751
db 0,1,1,0
773
db 0,1,0,0
752
db 0,1,0,0
774
db 0,1,0,0
753
db 0,1,0,0
775
db 0,0,0,0
754
db 0,0,0,0
776
dd g_block_3
755
dd g_block_3
777
 
756
 
778
g_block_3:
757
g_block_3:
779
db 1,0,0,0
758
db 1,0,0,0
780
db 1,1,1,0
759
db 1,1,1,0
781
db 0,0,0,0
760
db 0,0,0,0
782
db 0,0,0,0
761
db 0,0,0,0
783
dd g_block_0
762
dd g_block_0
784
 
763
 
785
;-----------------------------------
764
;-----------------------------------
786
 
765
 
787
k_block_0:
766
k_block_0:
788
      db 0,0,0,0
767
      db 0,0,0,0
789
      db 1,1,0,0
768
      db 1,1,0,0
790
      db 0,1,1,0
769
      db 0,1,1,0
791
      db 0,0,0,0
770
      db 0,0,0,0
792
      dd k_block_1
771
      dd k_block_1
793
 
772
 
794
k_block_1:
773
k_block_1:
795
      db 0,1,0,0
774
      db 0,1,0,0
796
      db 1,1,0,0
775
      db 1,1,0,0
797
      db 1,0,0,0
776
      db 1,0,0,0
798
      db 0,0,0,0
777
      db 0,0,0,0
799
      dd k_block_0
778
      dd k_block_0
800
 
779
 
801
;-----------------------------------
780
;-----------------------------------
802
 
781
 
803
color_table: dd 00000000h    ;black      0
782
color_table: dd 00000000h    ;black      0
804
                  dd 00cccccch    ;white      1
783
                  dd 00cccccch    ;white      1
805
                  dd 00cc0000h    ;red         2
784
                  dd 00cc0000h    ;red         2
806
                  dd 0000cc00h    ;green     3
785
                  dd 0000cc00h    ;green     3
807
                  dd 000000cch    ;blue        4
786
                  dd 000000cch    ;blue        4
808
                  dd 00cccc00h    ;yellow     5
787
                  dd 00cccc00h    ;yellow     5
809
                  dd 0000cccch    ;cyan      6
788
                  dd 0000cccch    ;cyan      6
810
                  dd 00cc00cch    ;pink        7
789
                  dd 00cc00cch    ;pink        7
811
 
790
 
812
block_table:
791
block_table:
813
    dd t_block_0 ; t
792
    dd t_block_0 ; t
814
    dd t_block_1
793
    dd t_block_1
815
    dd t_block_2
794
    dd t_block_2
816
    dd t_block_3
795
    dd t_block_3
817
    dd i_block_0 ; i
796
    dd i_block_0 ; i
818
    dd i_block_1
797
    dd i_block_1
819
    dd i_block_0
798
    dd i_block_0
820
    dd i_block_1
799
    dd i_block_1
821
    dd q_block_0 ; q
800
    dd q_block_0 ; q
822
    dd q_block_0
801
    dd q_block_0
823
    dd q_block_0
802
    dd q_block_0
824
    dd q_block_0
803
    dd q_block_0
825
    dd s_block_0 ; s
804
    dd s_block_0 ; s
826
    dd s_block_1
805
    dd s_block_1
827
    dd s_block_0
806
    dd s_block_0
828
    dd s_block_1
807
    dd s_block_1
829
    dd l_block_0 ; l
808
    dd l_block_0 ; l
830
    dd l_block_1
809
    dd l_block_1
831
    dd l_block_2
810
    dd l_block_2
832
    dd l_block_3
811
    dd l_block_3
833
    dd g_block_0 ; g
812
    dd g_block_0 ; g
834
    dd g_block_1
813
    dd g_block_1
835
    dd g_block_2
814
    dd g_block_2
836
    dd g_block_3
815
    dd g_block_3
837
    dd k_block_0 ; k
816
    dd k_block_0 ; k
838
    dd k_block_1
817
    dd k_block_1
839
    dd k_block_0
818
    dd k_block_0
840
    dd k_block_1
819
    dd k_block_1
841
 
820
 
842
if lang eq ru
821
if lang eq ru
843
 
822
 
844
  title          db '’…’ˆ‘ 1.61 - ‘’…‹Šˆ ˆ Ž…‹',0
823
  title          db '’¥âà¨á 1.62',0
845
  labe           db '€“‡€',0
824
  labe           db '€“‡€',0
846
  text           db 'Žçª¨:',0
825
  text           db 'Žçª¨:',0
847
  game_finished: db '  Ž‚€Ÿ',0
826
  game_finished: db '  Ž‚€Ÿ',0
848
 
827
 
849
else if lang eq et
828
else if lang eq et
850
 
829
 
851
  title          db 'TETRIS 1.61 - NOOLED & TÜHIK',0
830
  title          db 'Tetris 1.62',0
852
  labe           db 'PAUS',0
831
  labe           db 'PAUS',0
853
  text           db 'Tulemus:',0
832
  text           db 'Tulemus:',0
854
  game_finished: db 'UUS MÄNG',0
833
  game_finished: db 'UUS MÄNG',0
855
 
834
 
856
else
835
else
857
 
836
 
858
  title          db 'TETRIS 1.61 - ARROWS & SPACE',0
837
  title          db 'Tetris 1.62',0
859
  labe           db 'PAUSE',0
838
  labe           db 'PAUSE',0
860
  text           db 'Score:',0
839
  text           db 'Score:',0
861
  game_finished: db 'NEW GAME',0
840
  game_finished: db 'NEW GAME',0
862
 
841
 
863
end if
842
end if
864
 
843
 
865
pauses dd 0  ;/// Wildwest
844
pauses dd 0  ;/// Wildwest
866
parallel dd 1
845
parallel dd 1
867
score:                  dd 0
846
score:                  dd 0
868
TMP_0:                  dd 0
847
TMP_0:                  dd 0
869
TMP_1:                  dd 0
848
TMP_1:                  dd 0
870
generator:              dd 0
849
generator:              dd 0
871
current_block_x:        dd 0
850
current_block_x:        dd 0
872
current_block_y:        dd 0
851
current_block_y:        dd 0
873
current_block_pointer:  dd 0
852
current_block_pointer:  dd 0
874
current_block_color:    db 0
853
current_block_color:    db 0
875
number_str:             db 0,0,0,0,0,0,0,0,0
854
number_str:             db 0,0,0,0,0,0,0,0,0
876
end_number_str:
855
end_number_str:
877
size_of_number_str      dd 9
856
size_of_number_str      dd 9
878
delay:                  db 40
857
delay:                  db 40
879
force_down				dd 1
858
force_down				dd 1
880
sc     system_colors
859
sc     system_colors
881
table_tetris:
860
table_tetris:
882
 
861
 
883
I_END:
862
I_END: