Subversion Repositories Kolibri OS

Rev

Rev 4609 | Details | Compare with Previous | Last modification | View Log | RSS feed

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