summaryrefslogtreecommitdiff
path: root/csrc/mkf_asm.asm
blob: f9a562c474aa91ebf433274b20c9b3ec617ec177 (plain)
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
section .text
global fcn_00455040
extern table_483430
extern table_483530
extern data_483630
extern data_4847bc

fcn_00455040:
push ebp
mov ebp, esp
push ebx
push ecx
push esi
push edi
mov esi, data_483630
mov edi, data_4847bc
mov ecx, 0x463              ; 1123
rep movsd
mov edi, dword [ebp + 8]    ; [0x8:4]=-1 ; 8
mov esi, dword [ebp + 0xc]  ; [0xc:4]=-1 ; 12
xor edx, edx
L0:
call fcn_004551bb
or bh, bh
jne L1
mov byte [edi], bl
inc edi
jmp L0
L1:
mov eax, ecx
push ecx
shr eax, 3
and ecx, 7
mov eax, dword [esi + eax]
shr eax, cl
mov ebp, eax
and ebp, 0xff
mov cl, byte [ebp + table_483530]
mov dh, byte [ebp + table_483430]
shr eax, cl
mov dl, al
shl dl, 2
shr dx, 2
add cl, 6
mov eax, ecx
and eax, 0xff
pop ecx
add ecx, eax
cmp dx, 0xfff
je L2
mov ebp, ecx
sub ebx, 0xfd
push esi
lea esi, [edi - 1]
sub esi, edx
mov ecx, ebx
rep movsb
pop esi
mov ecx, ebp
jmp L0
L2:
pop edi
pop esi
pop ecx
pop ebx
pop ebp
ret


fcn_004551bb:
mov ebx, 0x500              ; 1280
L11:
mov bx, word [ebx + data_4847bc + 1284] ; [0x484cc0:2]=0
cmp bx, 0x502               ; 1282
jae L10
bt dword [esi], ecx
inc ecx
jae L11
add bx, 2
jmp L11
L10:
sub ebx, 0x502
push ebx
push ecx
push edi
call fcn_00455109
pop edi
pop ecx
pop ebx
shr bx, 1
ret

fcn_00455109:
cmp word [data_4847bc + 1280], 0x8000
jne L20
push ebx
call fcn_004550cc
pop ebx
L20:
mov bx, word [ebx + data_4847bc + 3848]
L21:
inc word [ebx + data_4847bc]
mov ax, word [ebx + data_4847bc]
cmp ax, word [ebx + data_4847bc + 2]
jbe L22
lea edi, [ebx + data_4847bc + 2]
mov ecx, 0x282
dec ax
repe scasw
sub edi, data_4847bc+4
inc ax
xchg word [edi + data_4847bc], ax
mov word [ebx + data_4847bc], ax
mov ax, word [ebx + data_4847bc + 1284]
mov cx, word [edi + data_4847bc + 1284]
mov word [ecx + data_4847bc + 2566], bx
cmp cx, 0x502
jae L24
mov word [ecx + data_4847bc + 2568], bx
L24:
xchg ax, cx
mov word [ecx + data_4847bc + 2566], di
cmp cx, 0x502
jae L23
mov word [ecx + data_4847bc + 2568], di
L23:
mov word [ebx + data_4847bc + 1284], ax
mov word [edi + data_4847bc + 1284], cx
mov bx, di
L22:
mov bx, word [ebx + data_4847bc + 2566]
or bx, bx
jne L21
ret

fcn_004550cc:
mov edx, 0x141              ; 321
xor ebp, ebp
xor ecx, ecx
L30:
mov cx, word [ebp + data_4847bc + 3848]
test word [ecx + data_4847bc], 1
je L31
mov ebx, ebp
call L20
L31:
add ebp, 2
dec edx
jne L30
xor ebx, ebx
L32:
shr word [ebx + data_4847bc], 1
add ebx, 2
cmp ebx, 0x502              ; 1282
jb L32
ret