128 lines
2.1 KiB
PHP
128 lines
2.1 KiB
PHP
;<EFBFBD><EFBFBD>Ž–…„“<EFBFBD>€ <EFBFBD><EFBFBD>Ž‚…<EFBFBD>Šˆ ‘“™…‘’‚Ž‚€<EFBFBD>ˆŸ <EFBFBD>“’ˆ „Ž Š<EFBFBD>Ž<EFBFBD>Šˆ [dest] ¨§ EAX
|
||
test_path:
|
||
pushad
|
||
mov cx, [lineCoord + eax*2 - 4]
|
||
mov edx, eax
|
||
cmp eax, [current]
|
||
je .recurs_call
|
||
|
||
cmp eax, [dest]
|
||
je .end_yes
|
||
|
||
cmp byte [eax + lineBall - 2], 0
|
||
jne .end_no
|
||
|
||
or byte [eax + lineBall - 2], 0x8 ;4-© ¡¨â - 1 (cheked)
|
||
|
||
.recurs_call:
|
||
;â㯮© ¢ë§®¢ ¤«ï á®á¥¤¨å ª«¥â®ª
|
||
test cl, cl
|
||
jz @F
|
||
sub eax, 9
|
||
call test_path
|
||
jc .end_yes
|
||
|
||
@@:
|
||
test cl, 8
|
||
jnz @F
|
||
mov eax, edx
|
||
add eax, 9
|
||
call test_path
|
||
jc .end_yes
|
||
|
||
@@:
|
||
test ch, ch
|
||
jz @F
|
||
mov eax, edx
|
||
dec eax
|
||
call test_path
|
||
jc .end_yes
|
||
|
||
@@:
|
||
test ch, 8
|
||
jnz .end_no
|
||
mov eax, edx
|
||
inc eax
|
||
call test_path
|
||
jc .end_yes
|
||
|
||
.end_no:
|
||
clc
|
||
popad
|
||
ret
|
||
.end_yes:
|
||
stc
|
||
popad
|
||
ret
|
||
|
||
;<EFBFBD><EFBFBD>Ž–…„“<EFBFBD>€ <EFBFBD>Žˆ‘Š€ ‘<EFBFBD>ˆ’›• ‹ˆ<EFBFBD>ˆ‰ ([dest] - ID ª®¯ª¨ ¤«ï ¯®¨áª )
|
||
find_line:
|
||
mov dword [findRightLeft], 0 ;®¡ã«ï¥¬ ç «ìë¥ § 票ï
|
||
|
||
mov eax, [dest]
|
||
add eax, lineBall - 2
|
||
mov dh, [eax]
|
||
mov [baseAddr], eax
|
||
or byte [eax], 0xF0
|
||
|
||
mov ecx, 8 ;¢ ecx - áç¥â稪
|
||
.cycle_find:
|
||
lea eax, [ecx*4 + ecx]
|
||
shl eax, 1 ;eax = ecx*10
|
||
mov edi, [eax + findTable - 4] ;edi - ªã¤ë § ¯¨áë¢ âì १-âë
|
||
mov ebp, [eax + findTable - 8] ;ebp - ¯à¨¡ ¢«¥¨¥ ¤à¥á
|
||
mov bx, [eax + findTable - 10] ;bx - ¯à¨¡ ¢«¥¨¥ ª®®à¤¨ â
|
||
mov dl, cl
|
||
shl dl, 4
|
||
mov esi, [baseAddr]
|
||
mov eax, [dest]
|
||
mov ax, [eax*2 + lineCoord - 4]
|
||
.small_cycle_find:
|
||
add al, bh
|
||
cmp al, 8 ;¢ [0..8] ?
|
||
ja @F
|
||
add ah, bl
|
||
cmp ah, 8
|
||
ja @F
|
||
|
||
add esi, ebp
|
||
cmp byte [esi], dh
|
||
jne @F
|
||
|
||
or byte [esi], dl
|
||
inc byte [edi]
|
||
jmp .small_cycle_find
|
||
@@:
|
||
loop .cycle_find
|
||
ret
|
||
|
||
findRightLeft db ?
|
||
findUpRight_DownLeft db ?
|
||
findUpDown db ?
|
||
findUpLeft_DownRight db ?
|
||
|
||
findTable:
|
||
Up:
|
||
db -1, 0
|
||
dd -1, findUpDown
|
||
Down:
|
||
db +1, 0
|
||
dd +1, findUpDown
|
||
Left:
|
||
db 0, -1
|
||
dd -9, findRightLeft
|
||
Right:
|
||
db 0, +1
|
||
dd +9, findRightLeft
|
||
UpLeft:
|
||
db -1, -1
|
||
dd -10, findUpLeft_DownRight
|
||
DownRight:
|
||
db +1, +1
|
||
dd +10, findUpLeft_DownRight
|
||
UpRight:
|
||
db -1, +1
|
||
dd +8, findUpRight_DownLeft
|
||
DownLeft:
|
||
db +1, -1
|
||
dd -8, findUpRight_DownLeft |