Я, конечно, не большой специалист по С++, но как работает код всё же представляю.Lavr wrote:Посмотрел код - нашел места, где обрабатывают адрес FFCC, кстати не так, как я ожидал.
Я ожидал сравнения на число FFCC, а в коде делается так:Code: Select all
004120C5: 8B8ED0000000 mov ecx,[esi][0000000D0] 004120CB: 68CCFF0000 push 00000FFCC 004120D0: E82B23FFFF call .000404400
В С++ есть вот такой абзац:
Code: Select all
void CCovox::SetWord (int addr, WORD value)
{
ASSERT (addr == 0177714);
if (addr == 0177714)
{
SetSample (value);
}
}
Но вот дальше: if (addr == 0177714)
Взял я сегодня один свой коротенький (чтоб легче искать) проект на С++, и вставил в него очень
похожий код:
Code: Select all
if (addr == 0177714)
{
// SetSample (value);
Sleep(0177714); //--- это аналог вызова функции
}
Sleep(10000); //--- это в исходном коде так и было
Code: Select all
.004011D7: 8B842430050000 mov eax,[esp][000000530]
.004011DE: 8B3594F14000 mov esi,[00040F194] - это явно указатель на ф-цию Sleep
.004011E4: 83C404 add esp,004
.004011E7: 3DCCFF0000 cmp eax,00000FFCC - if (addr == 0177714)
.004011EC: 7507 jne .0004011F5
.004011EE: 68CCFF0000 push 00000FFCC \ - 0177714
.004011F3: FFD6 call esi - Sleep(0177714);
.004011F5: 6810270000 push 000002710 \ - 10000
.004011FA: FFD6 call esi - Sleep(10000);

Остальное - просто интересно...
Только вот в коде эмулятора БК-0010 кода cmp eax,00000FFCC или чего похожего не нашлось...
