1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
| TITLE TETRIS
.MODEL TINY ;Устанавливаем модель памяти программы (64 Кб на все = стек, код, данные)
ASSUME CS:CSEG, DS:CSEG, SS:CSEG ; директива ассемблера, которая связывает сегментные регистры с именами сегментов
CSEG SEGMENT ;Начинаем сегмент кода (он же данных он же стека)
ORG 100H ;Для компиляции в com нужно указать смещение от начала в 256 байт (там Program Status Paragraph (PSP)
PROGRAM_TETRIS: ;Метка начала программы
;°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
call InitGame
jmp move1
Begin:
mov bx,asciiS
call PrintShape
key_Pressed:
mov ah,1
int 16h
jz end_kp
jmp read_key
end_kp:
mov ax,speed
cmp for1,ax
jb key_Pressed
move:
mov for1,0
mov ch,color
mov color,7
mov bx,2020h
call PrintShape
mov color,ch
inc y
call Verify
cmp space,0
jnz move0
jmp end_m
move0:
dec y
mov bx,asciiS
call PrintShape
call MoveDown
move1:
mov color,7
mov yl,13
mov xl,9
mov yr,19
mov xr,6
mov bx,02020h
call FillScr
mov cx,nextSh
mov ax,shapeN
mov nextSh,ax
mov shape,ax
mov dl,nextCo
mov dh,colorN
mov nextCo,dh
mov color,dh
mov y,12
mov x,12
mov pos,0
call NewShape
mov bx,asciiS
call PrintShape
mov shape,cx
mov color,dl
mov y,0
mov x,38
call NewShape
call Verify
cmp space,0
jnz tb0000
jmp end_m
tb0000:
xor si,si
mov cx,5
tb0001:
mov ah,table[si]
mov al,table[si+1]
cmp score,ax
ja tb0002
add si,10
loop tb0001
jmp wait_
tb0002:
mov cx,49
tb0003:
mov di,cx
mov ah,table[di]
mov al,table[di+1]
mov table[di+10],ah
mov table[di+11],al
cmp di,si
jz tb0004
loop tb0003
tb0004:
mov ax,score
mov table[si],ah
inc si
mov table[si],al
inc si
mov cx,8
mov di,74
tb0005:
mov ah,nameG[di]
mov table[si],ah
inc si
inc di
loop tb0005
mov yl,8
mov xl,30
mov yr,15
mov xr,10
mov bx,2020h
call FillScr
xor si,si
mov dh,9
tb0006:
mov dl,20h
mov ah,table[si]
inc si
mov al,table[si]
inc si
call WriteDec
mov ah,0
mov cx,8
mov dl,40
cmp al,0
jnz tb0007
mov ah,63
tb0007:
cmp ah,63
jnz tb0008
mov al,ah
jmp tb0009
tb0008:
mov al,table[si]
tb0009:
call PrintYX
inc si
inc dl
loop tb0007
inc dh
cmp dh,14
jnz tb0006
wait_:
mov xl,35
mov xr,45
mov yl,11
mov yr,35
wait0:
mov dl,30
wait1:
mov ah,1
int 16h
jz wait2
call InputName
cmp bh,1
jz clear
wait2:
mov read,1
call PrintYX
mov ah,colorN
mov color,ah
call PrintYX
inc dl
cmp dl,50
jz wait0
inc dh
cmp dh,23
jnz wait1
mov dh,1
jmp wait1
clear:
mov yl,1
mov xl,30
mov yr,23
mov xr,10
mov bx,2020h
call FillScr
mov score,0
mov ax,score
mov dx,090ah
call WriteDec
inc dl
mov cx,5
mov al,20h
sN0001:
call PrintYX
inc dl
loop sN0001
end_m:
jmp Begin
read_key:
mov for1,0
mov ch,color
mov color,7
mov bx,2020h
call PrintShape
mov color,ch
xor bx,bx
xor dx,dx
call ReadKey
cmp al,0
jnz bigN
jmp case
bigN:
cmp al,78
jnz smallN
jmp clear
smallN:
cmp al,110
jz clear
escape:
cmp al,27
jnz bigP
jmp Quit
bigP:
cmp al,80
jnz smallP
smallP:
cmp al,112
jnz spaceB
call ReadKey
jmp Begin
spaceB:
cmp al,32
jnz plus
inc y
call Verify
cmp space,0
jz spaceB
dec y
jmp Begin
plus:
cmp al,43
jnz mines
p0001:
sub speed,1000
cmp speed,0
jz m0001
jmp m0002
mines:
cmp al,45
jz m0001
jmp end_m
m0001:
add speed,1000
cmp speed,11000
jz p0001
m0002:
call Level
jmp Begin
case:
mov al,ah
down:
cmp al,80
jnz turn
mov dh,1
jmp keys
turn:
cmp al,72
jnz left
mov bl,64
jmp keys
left:
cmp al,75
jnz right
mov dl,254
jmp keys
right:
cmp al,77
jnz insert
mov dl,2
jmp keys
insert:
cmp al,82
jnz end_i
mov dx,1141h
lea si, msg1
add si,102
add count,420
cmp count,560
jbe ins000
sub si,7
mov count,140
ins000:
call WriteMsg
end_i:
jmp Begin
keys:
add x,dl
add y,dh
add pos,bl
call NewShape
call Verify
cmp space,0
jz end_k
sub x,dl
sub y,dh
sub pos,bl
call NewShape
end_k:
jmp Begin
Quit:
call EndGame
mov ax,3
int 10h
int 20h
;°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
;+=====================================+
;: :
;+=====================================+
InputName proc near
push dx
mov bh,0
mov dh,yl
mov dl,yr
call ReadKey
cmp al,0
jz it0006
cmp al,27
jz Quit
cmp nameG,1
jnz it0000
mov bh,1
jmp it0007
it0000:
cmp al,13
jnz it0002
mov dl,xl
inc dl
mov si,74
mov cx,8
it0001:
mov read,1
call PrintYX
mov nameG[si],al
inc si
inc dl
loop it0001
mov nameG,1
mov bh,1
jmp it0007
it0002: cmp al,8
jnz it0004
it0003: dec dl
cmp dl,xl
jz it0007
mov al,32
call PrintYX
jmp it0006
it0004: cmp dl,xl
jnz it0005
inc dl
it0005: call PrintYX
inc dl
cmp dl,xr
jz it0003
it0006: mov yr,dl
it0007: pop dx
ret
InputName endp
;+=====================================+
;: :
;+=====================================+
ReadKey proc near
mov ah,0
int 16h
ret
ReadKey endp
;+=====================================+
;: :
;+=====================================+
MoveDown proc near
xor si,si
mov cx,5
mov bh,0
md0000: mov dl,30
md0001: mov dh,YX[si+62]
add dh,y
mov read,1
call PrintYX
cmp al,32
jz md0004
add dl,2
cmp dl,52
jnz md0001
add score,5
mov ax,score
mov dx,090Ah
call WriteDec
xor dx,dx
mov bx,150
div bx
cmp dl,0
jnz cont
sub speed,1000
call Level
cont: mov dh,YX[si+62]
add dh,y
md0002: mov dl,30
md0003: dec dh
mov read,1
call PrintYX
push ax
mov al,20h
mov color,ah
call PrintYX
pop ax
inc dh
call PrintYX
inc dl
cmp dl,50
jnz md0003
dec dh
cmp dh,1
jnz md0002
md0004: inc si
loop md0000
ret
MoveDown endp
;+=====================================+
;: :
;+=====================================+
Level proc near
xor dx,dx
mov ax,10000
sub ax,speed
mov bx,1000
div bx
mov dx,0a13h
call WriteDec
ret
Level endp
;+=====================================+
;: :
;+=====================================+
NewShape proc near
push ax bx cx dx si di
xor ax,ax
xor dx,dx
mov bx,64
mov al,pos
div bx
mov bx,5
mul bx
add ax,shape
mov si,ax
mov cx,5
xor di,di
mov bx,10
ns0000: xor ax,ax
xor dx,dx
mov al,shapes[si]
div bx
mov YX[di+62],al
mov YX[di+67],dl
inc si
inc di
loop ns0000
pop di si dx cx bx ax
ret
NewShape endp
;+=====================================+
;:-> x, y :
;:-------------------------------------:
;:<- space=1 - false else true :
;+=====================================+
Verify proc near
push ax bx cx dx si
mov space,0
mov si,0
mov cx,5
v00000: mov dh,y
mov dl,x
add dh,YX[si+62]
add dl,YX[si+67]
mov read,1
call PrintYX
cmp al,32
jz v00001
mov space,1
v00001: inc si
loop v00000
pop si dx cx bx ax
ret
Verify endp
;+=====================================+
;:-> bx - ascii; if space=2 verify :
;:-------------------------------------:
;:use: <x, y> :
;+=====================================+
PrintShape proc near
push ax cx dx si
mov si,0
mov cx,5
ps0000: mov dh,y
mov dl,x
add dh,YX[si+62]
add dl,YX[si+67]
mov al,bh
call PrintYX
inc dl
mov al,bl
call PrintYX
inc si
loop ps0000
pop si dx cx ax
ret
PrintShape endp
;+=====================================+
;:-> bx - ascii; <xl, yl, xr, yr> :
;+=====================================+
FillScr proc near
push ax bx cx dx
mov dh,yl
fs0000: mov dl,xl
xor cx,cx
mov cl,xr
fs0001: mov al,bh
call PrintYX
inc dl
mov al,bl
call PrintYX
inc dl
loop fs0001
inc dh
cmp dh,yr
jnz fs0000
pop dx cx bx ax
ret
FillScr endp
;+=====================================+
;:-> si - offset message; dx - y, x :
;:-------------------------------------:
;:[] 0000h - end message; :
;: 0001h - x=begin, inc y; :
;: 0002h - x=begin, add y,2; :
;+=====================================+
WriteMsg proc near
push si bx dx
wm0000: mov al,[si]
cmp al,2
jnz wm0001
inc dh
jmp wm0002
wm0001: cmp al,1
jnz wm0003
wm0002: pop bx
push bx
mov dl,bl
inc dh
jmp wm0004
wm0003: cmp al,0
jz wm0005
call PrintYX
inc dl
wm0004: inc si
jmp wm0000
wm0005: pop dx bx si
ret
WriteMsg endp
;+=====================================+
;:-> x - word; dx - y, 8 :
;+=====================================+
WriteDec proc near
push ax bx cx dx
push dx
xor cx,cx
wd0000: mov bx,0ah
xor dx,dx
div bx
inc cx
pop bx
push dx
push bx
cmp al,0
ja wd0000
pop dx
wd0001: pop ax
add al,30h
call PrintYX
inc dl
loop wd0001
pop dx cx bx ax
ret
WriteDec endp
;+=====================================+
;:-> al - ascii; dx - y, x; <color> :
;:-------------------------------------:
;:<- al - ascii; ah - attr if read = 1 :
;+=====================================+
PrintYX proc near
push si dx cx
mov si,0
xor cx,cx
cmp dh,0
jz pyx001
mov cl,dh
pyx000: add si,160
loop pyx000
pyx001: mov cl,dl
add si,cx
add si,cx
mov dx,video
mov es,dx
cmp read,1
jz pyx002
mov es:[si],al
inc si
mov ch,color
mov es:[si],ch
jmp pyx003
pyx002: mov al,es:[si]
inc si
mov ah,es:[si]
mov read,0
pyx003: pop cx dx si
ret
PrintYX endp
;+=====================================+
;: :
;+=====================================+
Random proc near
push ds ax cx cs
pop ds
call Incr
inc paus
cmp paus,10
jnz r0
call Znak
inc paus
mov paus,0
r0: cmp speed,3000
ja r4
cmp c,0
jnz r1
call HS
r1: cmp c,1
jnz r2
call VS
r2: cmp c,2
jnz r3
call HS1
r3: cmp c,3
jnz r4
call VS1
r4: pop cx ax ds
iret
Random endp
;=======================================
HS proc near
call HorScroll
inc hor_scroll
cmp hor_scroll,8
jnz _h0
dec hor_scroll
mov c,1
cmp speed,2000
jnz _h0
mov c,2
_h0: ret
HS endp
;=======================================
VS proc near
call VerScroll
inc ver_scroll
cmp ver_scroll,8
jnz _v0
dec ver_scroll
mov c,2
cmp speed,3000
jnz _v0
mov c,3
_v0: ret
VS endp
;=======================================
HS1 proc near
call HorScroll
dec hor_scroll
cmp hor_scroll,255
jnz _h1
inc hor_scroll
mov c,3
cmp speed,2000
jnz _h1
mov c,0
_h1: ret
HS1 endp
;=======================================
VS1 proc near
call VerScroll
dec ver_scroll
cmp ver_scroll,255
jnz _v1
inc ver_scroll
mov c,0
cmp speed,3000
jnz _v1
mov c,1
_v1: ret
VS1 endp
;==================================
; SAP proc
;==================================
Incr proc near
add cs:[shapeN],20
mov ax,cs:[count]
cmp cs:[shapeN],ax
jb r00000
mov cs:[shapeN],0
r00000: inc byte ptr cs:[colorN]
cmp cs:[colorN],16
jnz r00001
mov cs:[colorN],9
r00001: add cs:[for1],500
ret
Incr endp
;=================================
; ZNAK proc
;=================================
Znak proc near
push es cx si ax dx bx di
call _znak_set
mov ax,0a000h
mov es,ax
mov cx,14
mov si,254*20h
cmp temp ,0
jz _t
mov temp,0
mov di,offset ascii+28
jmp _t_end
_t: mov temp,1
mov di,offset ascii+56
_t_end:
lilop:
mov al,[di]
mov es:[si],al
inc si
inc di
loop lilop
mov cx,14
mov si,255*20h
lilop1:
mov al,[di]
mov es:[si],al
inc si
inc di
loop lilop1
call _znak_get
pop di bx dx ax si cx es
ret
Znak endp
;+=====================================+
;: :
;+=====================================+
InitGame proc near
;[ Antivirus test ];
push ds
push cs
pop ds
mov ah,3dh
lea dx,fileC
int 21h
mov bx,ax
xor dx,dx
xor cx,cx
mov ax,4202h
int 21h
cmp ax,0002h
jz wf0002
cmp ax,3088
jbe wf0002
mov bx,2020h
call FillScr
lea si,msg4
mov dx,0c10h
call WriteMsg
call ReadKey
;[ File "tetris.scr" exist? ];
wf0002: mov ax,3d02h
mov dx,offset nameF
int 21h
cmp ax,0002h
jnz ls0001
;[ No ];
xor si,si
mov cx,50
ls0000: mov table[si],0
inc si
loop ls0000
mov ah,3ch
mov cx,20h
int 21h
mov handle,ax
jmp ls0002
;[ Load score in table ];
ls0001: mov handle,ax
mov ah,3fh
mov bx,handle
mov cx,50
mov dx,offset table
int 21h
mov ax,4200h
xor cx,cx
xor dx,dx
int 21h
ls0002: pop ds
;[ I have EGAVGA? ];
mov ah,12h
mov bx,5510h
int 10h
cmp bx,5510h
jz ig0000
;[ Yes ];
mov video,0b800h
mov asciiF,0fcfdh
mov asciiS,0feffh
;[ Load new ASCII symvols ];
push cs
pop es
mov bp,offset ascii
mov ax,1100h
mov bx,0e00h
mov dx,00fch
mov cx,0004h
int 10h
;[ Read old timer's vector ];
ig0000: mov ax,351ch
int 21h
mov oldBx,bx
mov oldEs,es
;[ Set new vector on Random ];
mov ax,251ch
mov dx,offset Random
int 21h
mov ax,shapeN
mov nextSh,ax
mov ah,colorN
mov nextCo,ah
;[ Print picture ];
mov color,7
mov bx,asciiF
call FillScr
mov color,8
mov yl,1
mov xl,3
mov yr,23
mov xr,12
call FillScr
mov xl,53
call FillScr
mov bx,0b0b0h
mov yl,2
mov xl,5
mov yr,22
mov xr,10
call FillScr
mov xl,55
call FillScr
mov color,0ch
mov bx,02020h
mov yl,3
mov xl,7
mov yr,21
mov xr,8
call FillScr
mov xl,57
call FillScr
mov yl,9
mov xl,30
mov yr,13
mov xr,10
call FillScr
lea si,msg
mov dx,0809h
call WriteMsg
lea si,msg1
mov dl,60
call WriteMsg
lea si,msg2
mov dx,0a23h
call WriteMsg
lea si,msg3
mov dx,1803h
call WriteMsg
ret
InitGame endp
;+=====================================+
;: :
;+=====================================+
EndGame proc near
;[ Clear scren ];
mov bx,2020h
mov yl,0
mov xl,0
mov yr,24
mov xr,80
mov color,7
call FillScr
;[ Load BIOS ASCII table ];
mov ax,1101h
mov cx,04h
mov dx,00fch
mov bx,0e00h
int 10h
;[ Save table in file "tetris.res" ];
push ds
mov ah,40h
mov bx,handle
push cs
pop ds
mov dx,offset table
mov cx,32h
int 21h
pop ds
;[ Return timer's vector];
mov ax,251ch
mov dx,oldEs
mov ds,dx
mov dx,cs:oldBx
int 21h
ret
EndGame endp
;ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ
;+=====================================+
;: :
;+=====================================+
wait_vert_line proc near
push ax dx
mov dx,3DAh
@@loc_15:
in al,dx ; port 3DAh, CGA/EGA vid status
test al,8
jnz @@loc_15 ; Jump if not zero
@@loc_16:
in al,dx
test al,8
jz @@loc_16
pop dx ax
ret
wait_vert_line endp
;+=====================================+
;: znako_generator :
;+=====================================+
_znak_set proc near
cli
mov dx,3c4h
mov si,offset spar
mov cx,2
l: lodsw
out dx,ax
loop l
sti
mov dx,3ceh
mov si,offset grar
mov cx,3
l1: lodsw
out dx,ax
loop l1
ret
_znak_set endp
_znak_get proc near
cli
mov dx,3c4h
mov si,offset spar1
mov cx,2
l2: lodsw
out dx,ax
loop l2
sti
mov dx,3ceh
mov si,offset grar1
mov cx,3
l11: lodsw
out dx,ax
loop l11
ret
_znak_get endp
;±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
; name VerScroll
; title ‚ҐавчЄ*«м*Ё© б¤ўчЈ ᮤҐа¦ч¬®Ј® ҐЄа***
; Descr ”г*Єжчп ᬥй*Ґв ᮤҐа¦ч¬®Ґ ҐЄа*** ўўҐае ** n ЇчЄбҐ«®ў
; params word Voffset - «®ЈчзҐбЄ*п ичач** ҐЄа***
;-----------------------------------------------------------------------------
VerScroll proc near
push es
push ax bx cx dx si di
xor ax,ax
mov es,ax
mov dx,es:[463h]
add dx,6
call wait_vert_line
sub dx,6
inc dx
add dx,5
wait_next:
in al,dx
nop
nop
test al,8h
jz wait_next
sub dx,6
mov al,8
out dx,al
mov al,Ver_scroll
inc dx
out dx,al
pop di si dx cx bx ax
pop es
ret
VerScroll endp
;±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
; name HorScroll
; title gorizontall б¤ўчЈ ᮤҐа¦ч¬®Ј® ҐЄа***
; Descr ”г*Єжчп ᬥй*Ґв ᮤҐа¦ч¬®Ґ left&right ** n ЇчЄбҐ«®ў
; params word Voffset - «®ЈчзҐбЄ*п ичач** ҐЄа***
;-----------------------------------------------------------------------------
HorScroll proc near
push es
push ax bx cx dx si di
xor ax,ax
mov es,ax
mov dx,es:[463h]
add dx,6
call wait_vert_line
sub dx,6
add dx,5
in al,dx
nop
nop
mov dx,3c0h
mov al,13h
out dx,al
mov al,Hor_scroll
out dx,al
mov al,20h
out dx,al
pop di si dx cx bx ax
pop es
ret
HorScroll endp
;±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
;ax -input start adres
;start_adres proc near
; push es
; push ax bx cx dx si di
; push ax
; xor ax,ax
; mov es,ax
; mov dx,es:[463h]
; add dx,6
; call wait_vert_line
; sub dx,6
; mov al,0dh
; out dx,al
; inc dx
; pop ax
; push ax
; out dx,al
; dec dx
; mov al,0ch
; out dx,al
; inc dx
; pop ax
; mov al,ah
; out dx,al
; pop di si dx cx bx ax
; pop es
; ret
;start_adres endp
;+--------------------------------------------------------------------------+
;: DATA :
;+--------------------------------------------------------------------------+
;------------- data ЇҐаҐЇа®Ја*¬гў***п §**Є®ЈҐ*Ґа*в®а*
c db 1
paus db 0
; dw 100h ;бч*еа®**ч© бЎа®б
spar dw 402h ;§*ЇЁб ў 2 Ў**Є
dw 704h ;Ї®б«ч¤®ў** *¤аҐб*жчп
; dw 300h ;®зЁбвЄ* бЎа®б*
grar dw 204h ;2 Ў**Є ¤«п бзЁвгў***п
dw 5h ;§*Ў®а®** *Ґз®в*®щ *¤аҐб*жчщ
dw 406h ;Ў**Є **зЁ**хвмбп Ї® 0*000*
;------------- data ЇҐаҐЇа®Ја*¬гў***п §**Є®ЈҐ*Ґа*в®а*
; dw 100h ;бч*еа®**ч© бЎа®б
spar1 dw 302h ;§*ЇЁб ў 2 Ў**Є vsi banki
dw 0304h;Ї®б«ч¤®ў** *¤аҐб*жчп
; dw 300h ;®зЁбвЄ* бЎа®б*
grar1 dw 4h ;Ў**Є ¤«п бзЁвгў***п ???
dw 01005h;§*Ў®а®** *Ґз®в*®щ *¤аҐб*жчщ
dw 0e06h ;Ў**Є **зЁ**хвмбп Ї® 0b800*
;--------------
Ver_scroll db 0
Hor_scroll db 0
temp db 0
;--------------
ascii db 0FFh,000h,0DAh,06Ch,0B6h,00h,0FFh,80h,95h,0AAh,095h,0AAh,095h,80h
db 0FFh,080h,0B6h,09Bh,0ADh,80h,0FFh,00h,54h,0AAh,054h,0AAh,054h,00h
db 000h,00Fh,03Fh,07Fh,07Fh,079h,063h,07Eh,07Ch,00Ch,007h,007h,005h,000h
db 000h,0F0h,0FCh,0FEh,08Eh,86h,0C6h,7Eh,3Eh,030h,0E0h,0E0h,0A0h,00h
db 000h,00Fh,03Fh,07Fh,071h,61h,063h,7Eh,7Ch,00Ch,007h,007h,005h,00h
db 000h,0F0h,0FCh,0FEh,0FEh,09Eh,0C6h,07Eh,03Eh,030h,0E0h,0E0h,0A0h,000h
shapes db 20,22,30,32,32, 20,22,30,32,32, 20,22,30,32,32, 20,22,30,32,32
db 20,22,30,40,40, 30,40,42,44,44, 22,32,40,42,42, 30,32,34,44,44
db 20,22,32,42,42, 30,32,34,40,40, 20,30,40,42,42, 34,40,42,44,44
db 20,30,32,40,40, 32,40,42,44,44, 22,30,32,42,42, 30,32,34,42,42
db 22,30,32,40,40, 30,32,42,44,44, 22,30,32,40,40, 30,32,42,44,44
db 20,30,32,42,42, 32,34,40,42,42, 20,30,32,42,42, 32,34,40,42,42
db 20,30,40,50,50, 50,52,54,56,56, 20,30,40,50,50, 50,52,54,56,56
db 20,22,30,40,50, 40,50,52,54,56, 22,32,42,50,52, 40,42,44,46,56
db 20,22,32,42,52, 40,42,44,46,50, 20,30,40,50,52, 46,50,52,54,56
db 20,30,32,42,52, 42,44,46,50,52, 20,30,40,42,52, 44,46,50,52,54
db 22,30,32,40,50, 40,42,52,54,56, 22,32,40,42,50, 40,42,44,54,56
db 22,30,32,34,42, 22,30,32,34,42, 22,30,32,34,42, 22,30,32,34,42
db 20,30,40,50,60, 60,62,64,66,68, 20,30,40,50,60, 60,62,64,66,68
db 20,22,24,32,42, 20,30,32,34,40, 22,32,40,42,44, 24,30,32,34,44
db 20,30,32,32,32, 22,30,32,32,32, 20,22,32,32,32, 20,22,30,30,30
db 20,22,32,34,44, 22,24,30,32,40, 20,30,32,42,44, 24,32,34,40,42
db 20,30,32,40,50, 42,50,52,54,56, 22,32,40,42,52, 40,42,44,46,54
db 22,30,32,42,52, 40,42,44,46,52, 20,30,40,42,50, 44,50,52,54,56
db 20,22,32,42,44, 24,30,32,34,40, 20,22,32,42,44, 24,30,32,34,40
db 22,24,32,40,42, 20,30,32,34,44, 22,24,32,40,42, 20,30,32,34,44
db 20,22,32,34,42, 22,30,32,34,40, 22,30,32,42,44, 24,30,32,34,42
db 22,24,30,32,42, 20,30,32,34,42, 22,32,34,40,42, 22,30,32,34,44
db 20,30,40,40,40, 40,42,44,44,44, 20,30,40,40,40, 40,42,44,44,44
db 20,30,30,30,30, 30,32,32,32,32, 20,30,30,30,30, 30,32,32,32,32
db 20,22,24,30,40, 20,30,40,42,44, 24,34,40,42,44, 20,22,24,34,44
db 20,30,32,40,42, 32,34,40,42,44, 20,22,30,32,42, 30,32,34,40,42
db 22,30,32,40,42, 30,32,34,42,44, 20,22,30,32,40, 30,32,40,42,44
db 20,22,30,40,42, 30,34,40,42,44, 20,22,32,40,42, 30,32,34,40,44
db 20,20,20,20,20, 20,20,20,20,20, 20,20,20,20,20, 20,20,20,20,20
msg db " ђҐ§г«мв*в:",2
db "ђiўҐ*м: 0",2
db " Ќ*бвгЇ**:",0
msg1 db "Esc: ўЁеi¤",1
db 27," : ўЇа*ў®",1
db 26," : ў«iў®",1
db 24," : ®ЎҐав",1
db 25," : ў*Ё§",1
db "P : Ї*г§*",1
db "N : §**®ў®",1
db "+/-: аiўҐ*м",2
db "Ins: tetris",0,"pentix",0
msg2 db "‚*иҐ i¬'п:",0
msg3 db "(c) 1995 ‰.ЊҐ¤ўҐжмЄЁ©, I.„пЄг*, I.ЉҐЇЁз, ‚.ђҐ¤мЄ®."
db " ‹мўiў, 'Hackers group'.",0
msg4 db "„® ¬Ґ*Ґ ев®бм ¤®ЇЁб*ўбп! Њ®¦«Ёў®, в® ўiагб!",0
nameF db "tetris.scr",0
fileC db "tetris.com",0
handle dw ?
video dw 0b000h
asciiF dw 0b1b1h
asciiS dw 0dbdbH
for1 dw 0
oldBx dw ?
oldEs dw ?
shapeN dw 0
nextSh dw 0
shape dw 0
colorN db 9
nextCo db 0
color db 12
count dw 140
xl db 0
yl db 0
xr db 80
yr db 23
pos db 0
x db 38
y db 18
space db 0
read db 0
score dw 0
speed dw 10000
nameG db 0
YX db 0
table db 0
;+--------------------------------------------------------------------------+
CSEG ENDS
END PROGRAM_TETRIS |