А ты пересобери сам...Shaos wrote:А ты попробуй пересобери исходники в старой вижуалстудии - авось заведётся?


Вот тебе и исходники в руки: http://boulder-dash.narod.ru/bk_emulator/sources.html
Moderator: Shaos
А ты пересобери сам...Shaos wrote:А ты попробуй пересобери исходники в старой вижуалстудии - авось заведётся?
А где там написано, что в старых виндах не работает? Вроде всё что перечислено замечательно применимо и для винды-98Lavr wrote:А ты пересобери сам...Shaos wrote:А ты попробуй пересобери исходники в старой вижуалстудии - авось заведётся?Зачем мне этот "авось", когда я всё внимательно прочитал?
![]()
Вот тебе и исходники в руки: http://boulder-dash.narod.ru/bk_emulator/sources.html
Эти исходники сейчас по молчаливому наследству развивает и допиливает другой человек,Shaos wrote:А где там написано, что в старых виндах не работает?
И у меня лично всего вот этого хламья нет:Shaos wrote:Вроде всё что перечислено замечательно применимо и для винды-98
Калмыков Юрий wrote:Для успешной компиляции у вас также должны быть установлены:
1. VisualC++ v6.0 - компилятор (в интерфейсе используется MFC 4.2)
2. MSDN
3. Platform SDK
4. DirectX SDK - 8.0 или старше
Многое на свете не проблема... Но из-за программы, рамером в 156 КБайт, у меня как-то нетShaos wrote:...тоже не проблема, ...
Действительно, сделано через switch (...) case ...Lavr wrote:Могло быть сделано через switch (...) case ...
Чистая правда! Длинный switch реализуется одним jmp'ом!begoon wrote:компилятор C развернет длинный switch в jump table, который будет работать гораздо быстрее,
чем любая логика по разбору опкодов по методу дизассемблера.
Фактически, этот switch будет реализован одним jmp'ом.
Code: Select all
case 0177714:
if (m_pCovox)
m_pCovox->SetWord (0177714, src);
return;
Code: Select all
.00405D99: 668B542440 mov dx,[esp][00040] //--- src
.00405D9E: 66895658 mov [esi][00058],dx
.00405DA2: E936FFFFFF jmp .000405CDD //--- всякие манипуляции и retn
Однако... метод красив и вполне работает, причем корректно!Lavr wrote:Shaos, пока я ищу точку входа (а я надеюсь, что всё же найду), посмотри вот этот материал:
http://arhiv.xaker.name/threads/22158/
Всё ли там достоверно?
Code: Select all
BOOL WINAPI DllMain(HINSTANCE hinstDLL,DWORD fdwReason,LPVOID lpvReserved)
{
if (fdwReason==DLL_PROCESS_ATTACH)
...
Code: Select all
if (fdwReason==DLL_PROCESS_DETACH)
...
}
Я по простоте душевной сначала тоже так с разбегу думал... но оказалось, что вShaos wrote:да в DllMain и создавать - не?
Аааааааа! Заработалооооооо!Lavr wrote:Пересобираю потихоньку... но расписано всё вроде по уму.
Ну и поскольку всё это не было самоцелью, то я быстренько инжектировал ту же самую DLL-ку в код эмулятора БК-0010...Lavr wrote:В общем корректно инжектироваться в готовый код - можно!
Всплыть из DLL-ки отдельным окном - тоже можно!
А ты знаешь, я тоже задавался этим вопросом, когда вспоминал, кто такие PEEK и POKE.Shaos wrote:а тут PEEK и POKE двухбайтовые или однобайтовые? процык вроде как 16-битный (и шина данных тоже)...
Видимо реализуется инструкцией movb.Lavr wrote:И ведь они оказались честные олдскульные однобайтные PEEK и POKE!![]()
Что особенно впечатляет по нечетным адресам!