Отладочный модуль на К1801ВМ1

Digital Equipment Corporation PDP-8 & PDP-11 (а также совместимые с последним советские ЭВМ на 1801ВМ1/2/3)

Moderator: Shaos

User avatar
Lavr
Supreme God
Posts: 16689
Joined: 21 Oct 2009 08:08
Location: Россия

Re: Отладочный модуль на К1801ВМ1

Post by Lavr »

Shaos wrote:А ты попробуй пересобери исходники в старой вижуалстудии - авось заведётся?
А ты пересобери сам... :wink: Зачем мне этот "авось", когда я всё внимательно прочитал? :o
Вот тебе и исходники в руки: http://boulder-dash.narod.ru/bk_emulator/sources.html
iLavr
User avatar
Shaos
Admin
Posts: 24080
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Отладочный модуль на К1801ВМ1

Post by Shaos »

Lavr wrote:
Shaos wrote:А ты попробуй пересобери исходники в старой вижуалстудии - авось заведётся?
А ты пересобери сам... :wink: Зачем мне этот "авось", когда я всё внимательно прочитал? :o
Вот тебе и исходники в руки: http://boulder-dash.narod.ru/bk_emulator/sources.html
А где там написано, что в старых виндах не работает? Вроде всё что перечислено замечательно применимо и для винды-98

Пересобрать я конечно могу попробовать, но только это будет пересборка для XP...
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Lavr
Supreme God
Posts: 16689
Joined: 21 Oct 2009 08:08
Location: Россия

Re: Отладочный модуль на К1801ВМ1

Post by Lavr »

Shaos wrote:А где там написано, что в старых виндах не работает?
Эти исходники сейчас по молчаливому наследству развивает и допиливает другой человек,
вот у него всё подробно и написано.
Shaos wrote:Вроде всё что перечислено замечательно применимо и для винды-98
И у меня лично всего вот этого хламья нет:
Калмыков Юрий wrote:Для успешной компиляции у вас также должны быть установлены:

1. VisualC++ v6.0 - компилятор (в интерфейсе используется MFC 4.2)
2. MSDN
3. Platform SDK
4. DirectX SDK - 8.0 или старше
iLavr
User avatar
Shaos
Admin
Posts: 24080
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Отладочный модуль на К1801ВМ1

Post by Shaos »

Шестая студия вышла в 1998 году и была последней, которая работала на Win9X
MFC 4.2 поставлялся в составе Win98
MSDN незнаю зачем ему надо - может так приписал
Platform SDK - по идее если есть студия, то оно там уже есть
DirectX SDK 8 - вроде тоже не проблема, т.к. последней версией с поддержкой Win9X была 8.0а
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Lavr
Supreme God
Posts: 16689
Joined: 21 Oct 2009 08:08
Location: Россия

Re: Отладочный модуль на К1801ВМ1

Post by Lavr »

Shaos wrote:...тоже не проблема, ...
Многое на свете не проблема... Но из-за программы, рамером в 156 КБайт, у меня как-то нет
желания разыскивать и втаскивать мегабайты этого хламья.
Я отлично представляю, что это из себя представляет. Но я не девелопер софта. :wink:
iLavr
User avatar
Lavr
Supreme God
Posts: 16689
Joined: 21 Oct 2009 08:08
Location: Россия

Re: Отладочный модуль на К1801ВМ1

Post by Lavr »

Всё! Нашел точку вывода слова в порт о177714 ! :kruto:
Lavr wrote:Могло быть сделано через switch (...) case ...
Действительно, сделано через switch (...) case ...

И мне очень захотелось проверить вот эту уже очень давнюю информацию - руки никак не доходили! 8)
begoon wrote:компилятор C развернет длинный switch в jump table, который будет работать гораздо быстрее,
чем любая логика по разбору опкодов по методу дизассемблера.
Фактически, этот switch будет реализован одним jmp'ом.
Чистая правда! Длинный switch реализуется одним jmp'ом! :o
В результате всех ухищрений хитрого С++, код

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 
где числом 0177714 = FFCCH просто и рядом не пахнет! :roll:
Если не знаешь, что искать - никогда не найдешь... :wink:

Ну а точку ввода из порта о177714 я нашел сразу - там всё проще и подходит к моей задаче.
Коды клавиатуры проецируются на биты слова из порта о177714, изображая джойстик.

Что ж... попробую теперь корректно "инжектироваться" в код... :wink:
iLavr
User avatar
Lavr
Supreme God
Posts: 16689
Joined: 21 Oct 2009 08:08
Location: Россия

Re: Отладочный модуль на К1801ВМ1

Post by Lavr »

Lavr wrote:Shaos, пока я ищу точку входа (а я надеюсь, что всё же найду), посмотри вот этот материал:
http://arhiv.xaker.name/threads/22158/
Всё ли там достоверно?
Однако... метод красив и вполне работает, причем корректно! :kruto:

Его вариации много где с разной степенью бестолковости описывают:
Внедрение кода из dll ;
Как внедрить код в exe-файл ;
Жесткое внедрение DLL в Windows-программы ;
Техника внедрения кода в РЕ-файлы .

Но всё же наиболее популярно Мыщъх Касперски излагает вот здесь:
Новый способ 'склеить' два исполняемых файла
Я придержался этого изложения, оно понятнее, хоть и небезгрешно, но идея везде примерно одинакова...


P.S. Для понимания сути дела очень полезен вот этот материал на русском:
Структура исполняемых файлов Win32. PE-файлы: общее описание.
iLavr
User avatar
Lavr
Supreme God
Posts: 16689
Joined: 21 Oct 2009 08:08
Location: Россия

Re: Отладочный модуль на К1801ВМ1

Post by Lavr »

Что-то я затупил в самый неподходящий момент... :osad:

Shaos, как создать окно из dll-библиотеки? :roll:

Описанным выше методом она цепляется к ехе-файлу статически, т.е. когда файл загружается,
то dll-библиотека подгружается неявно, отрабатывает

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)
      ...
}
при закрытии.

Доступна функция, через которую из ехе-можно передать значение.

А вот где создавать окно из dll-библиотеки? Я тут что-то и затупил... :wink:
iLavr
User avatar
Shaos
Admin
Posts: 24080
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Отладочный модуль на К1801ВМ1

Post by Shaos »

да в DllMain и создавать - не?
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Lavr
Supreme God
Posts: 16689
Joined: 21 Oct 2009 08:08
Location: Россия

Re: Отладочный модуль на К1801ВМ1

Post by Lavr »

Shaos wrote:да в DllMain и создавать - не?
Я по простоте душевной сначала тоже так с разбегу думал... но оказалось, что в
Dll всё не так просто...

Нашел пример похожий: Creating a Window from a DLL
Но там всяких мелких ошибок понасыпано, в том числе и компиллер старый у меня... :wink:
Пересобираю потихоньку... но расписано всё вроде по уму.
iLavr
User avatar
Lavr
Supreme God
Posts: 16689
Joined: 21 Oct 2009 08:08
Location: Россия

Re: Отладочный модуль на К1801ВМ1

Post by Lavr »

Lavr wrote:Пересобираю потихоньку... но расписано всё вроде по уму.
Аааааааа! Заработалооооооо! :kruto:
dididisp.gif
Не утерпел! "Всплыл" оконной DLL-кой из консольного приложения Венды! :lol:
И ничего! Венда не упала! (На форме конечно-же просто картинка-фон для удовольствия...)

В общем корректно инжектироваться в готовый код - можно!
Всплыть из DLL-ки отдельным окном - тоже можно!

Ну теперь осталось подчистить всяки сопли и, собственно, написать в DLL-ке код
7-сегментного индикатора.
А это несложно, но довольно муторно. Венда весьма противно работает с графикой,
всякие эти контексты... бит-блиты... :-?
You do not have the required permissions to view the files attached to this post.
iLavr
User avatar
Lavr
Supreme God
Posts: 16689
Joined: 21 Oct 2009 08:08
Location: Россия

Re: Отладочный модуль на К1801ВМ1

Post by Lavr »

Lavr wrote:В общем корректно инжектироваться в готовый код - можно!
Всплыть из DLL-ки отдельным окном - тоже можно!
Ну и поскольку всё это не было самоцелью, то я быстренько инжектировал ту же самую DLL-ку в код эмулятора БК-0010...
И всё получилось, как и было задумано! :kruto:
didiBK0010.gif
Хотя в общем-то шибко радоваться еще рано, просто DLL корректно вошла в адресное
пространство ЕХЕ-файла, и он импортировал её функцию.
Посмотрим, как это всё дальше взаимодействовать будет, не упало бы в процессе... :-?
You do not have the required permissions to view the files attached to this post.
iLavr
User avatar
Shaos
Admin
Posts: 24080
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Отладочный модуль на К1801ВМ1

Post by Shaos »

а тут PEEK и POKE двухбайтовые или однобайтовые? процык вроде как 16-битный (и шина данных тоже)

а то мы с автором эмулятора МК-85 (и всех расширений ПЗУ для МК-85) тут договорились в МК-85 наряду с уже добавленными однобайтовыми PEEK/POKE сделать двухбайтовую вариацию, когда символ # перед адресом указывается - типа POKE 104,0 будет обнулять один байт по адресу 104, а POKE #104,0 будет обнулять слово - т.е. байты с адресами 104 и 105...
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Lavr
Supreme God
Posts: 16689
Joined: 21 Oct 2009 08:08
Location: Россия

Re: Отладочный модуль на К1801ВМ1

Post by Lavr »

Shaos wrote:а тут PEEK и POKE двухбайтовые или однобайтовые? процык вроде как 16-битный (и шина данных тоже)...
А ты знаешь, я тоже задавался этим вопросом, когда вспоминал, кто такие PEEK и POKE. :lol:

И ведь они оказались честные олдскульные однобайтные PEEK и POKE! :o
Что особенно впечатляет по нечетным адресам! 8)
iLavr
SAA
Senior
Posts: 136
Joined: 12 Jul 2016 21:30

Re: Отладочный модуль на К1801ВМ1

Post by SAA »

Lavr wrote:И ведь они оказались честные олдскульные однобайтные PEEK и POKE! :o
Что особенно впечатляет по нечетным адресам! 8)
Видимо реализуется инструкцией movb.