Details | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
950 | leency | 1 | ;ПРОЦЕДУРА ПРОВЕРКИ СУЩЕСТВОВАНИЯ ПУТИ ДО КНОПКИ [dest] из EAX |
2 | test_path: |
||
3 | pushad |
||
4 | mov cx, [lineCoord + eax*2 - 4] |
||
5 | mov edx, eax |
||
6 | cmp eax, [current] |
||
7 | je .recurs_call |
||
8 | |||
9 | cmp eax, [dest] |
||
10 | je .end_yes |
||
11 | |||
12 | cmp byte [eax + lineBall - 2], 0 |
||
13 | jne .end_no |
||
14 | |||
15 | or byte [eax + lineBall - 2], 0x8 ;4-й бит - 1 (cheked) |
||
16 | |||
17 | .recurs_call: |
||
18 | ;тупой вызов для соседних клеток |
||
19 | test cl, cl |
||
20 | jz @F |
||
21 | sub eax, 9 |
||
22 | call test_path |
||
23 | jc .end_yes |
||
24 | |||
25 | @@: |
||
26 | test cl, 8 |
||
27 | jnz @F |
||
28 | mov eax, edx |
||
29 | add eax, 9 |
||
30 | call test_path |
||
31 | jc .end_yes |
||
32 | |||
33 | @@: |
||
34 | test ch, ch |
||
35 | jz @F |
||
36 | mov eax, edx |
||
37 | dec eax |
||
38 | call test_path |
||
39 | jc .end_yes |
||
40 | |||
41 | @@: |
||
42 | test ch, 8 |
||
43 | jnz .end_no |
||
44 | mov eax, edx |
||
45 | inc eax |
||
46 | call test_path |
||
47 | jc .end_yes |
||
48 | |||
49 | .end_no: |
||
50 | clc |
||
51 | popad |
||
52 | ret |
||
53 | .end_yes: |
||
54 | stc |
||
55 | popad |
||
56 | ret |
||
57 | |||
58 | ;ПРОЦЕДУРА ПОИСКА СБИТЫХ ЛИНИЙ ([dest] - ID кнопки для поиска) |
||
59 | find_line: |
||
60 | mov dword [findRightLeft], 0 ;обнуляем начальные значения |
||
61 | |||
62 | mov eax, [dest] |
||
63 | add eax, lineBall - 2 |
||
64 | mov dh, [eax] |
||
65 | mov [baseAddr], eax |
||
66 | or byte [eax], 0xF0 |
||
67 | |||
68 | mov ecx, 8 ;в ecx - счетчик |
||
69 | .cycle_find: |
||
70 | lea eax, [ecx*4 + ecx] |
||
71 | shl eax, 1 ;eax = ecx*10 |
||
72 | mov edi, [eax + findTable - 4] ;edi - куды записывать рез-ты |
||
73 | mov ebp, [eax + findTable - 8] ;ebp - прибавление адреса |
||
74 | mov bx, [eax + findTable - 10] ;bx - прибавление координат |
||
75 | mov dl, cl |
||
76 | shl dl, 4 |
||
77 | mov esi, [baseAddr] |
||
78 | mov eax, [dest] |
||
79 | mov ax, [eax*2 + lineCoord - 4] |
||
80 | .small_cycle_find: |
||
81 | add al, bh |
||
82 | cmp al, 8 ;в [0..8] ? |
||
83 | ja @F |
||
84 | add ah, bl |
||
85 | cmp ah, 8 |
||
86 | ja @F |
||
87 | |||
88 | add esi, ebp |
||
89 | cmp byte [esi], dh |
||
90 | jne @F |
||
91 | |||
92 | or byte [esi], dl |
||
93 | inc byte [edi] |
||
94 | jmp .small_cycle_find |
||
95 | @@: |
||
96 | loop .cycle_find |
||
97 | ret |
||
98 | |||
99 | findRightLeft db ? |
||
100 | findUpRight_DownLeft db ? |
||
101 | findUpDown db ? |
||
102 | findUpLeft_DownRight db ? |
||
103 | |||
104 | findTable: |
||
105 | Up: |
||
106 | db -1, 0 |
||
107 | dd -1, findUpDown |
||
108 | Down: |
||
109 | db +1, 0 |
||
110 | dd +1, findUpDown |
||
111 | Left: |
||
112 | db 0, -1 |
||
113 | dd -9, findRightLeft |
||
114 | Right: |
||
115 | db 0, +1 |
||
116 | dd +9, findRightLeft |
||
117 | UpLeft: |
||
118 | db -1, -1 |
||
119 | dd -10, findUpLeft_DownRight |
||
120 | DownRight: |
||
121 | db +1, +1 |
||
122 | dd +10, findUpLeft_DownRight |
||
123 | UpRight: |
||
124 | db -1, +1 |
||
125 | dd +8, findUpRight_DownLeft |
||
126 | DownLeft: |
||
127 | db +1, -1 |
||
128 | dd -8, findUpRight_DownLeft |