Разработка и ромхакинг > Ромхакинг и программирование
Мод Gens бряки чтение запись РС
(1/6) > >>
ЯковлевВиктор:
Используя исходники Tracer,а точне его хуки сделал мод который позволяет ставить бряки на чтение, запись и PC и при этом без всяких тормозов как в прошлой версии! Итак версия 1.0!
Качать тут http://slil.ru/25669257

КАк им пользоваться:
Загружаем игру и Входим меню CPU->Дебаггер->Genesis - Debugger. Сразу же покажет кусок кода где сейчас игра находится!Ставим бряк в поле редактирования вида FF9C11 и никак иначе! Ставим галку установить брейкпоинт и галку типа бряка: можете выбрать какой именно чтение, запись, РС или все подряд(пока индикацию какой именно тип бряка сработал не сделал)! Нажимаете ОК и ждете пока бряк не сработал и вывалится тоже самое окно и то место где сработал бряк(кусок кода покажет)! Нажимаете ОК и можете дальше ждать пока опять бряк не сработает,т.к. бряк остается!Чтобы снять его вызовите снова окно дебаггера и снимите все галки

Из минусов пока их не устранил: бряк срабатывает на запись и чтение на следующей команде после записи или чтения! Скажем сработал бряк на запись счетчик РС должен стоять на 11678, а покажет код начиная с 1167А(В зависимости от размера команды записи может и 6 и 8 и 10).Бряк на РС показывает четко именно то место где бряк сработал!
HardWareMan:

--- Цитата: ЯковлевВиктор от 09 Апрель 2008, 09:43:25 ---Из минусов пока их не устранил: бряк срабатывает на запись и чтение на следующей команде после записи или чтения! Скажем сработал бряк на запись счетчик РС должен стоять на 11678, а покажет код начиная с 1167А(В зависимости от размера команды записи может и 6 и 8 и 10).Бряк на РС показывает четко именно то место где бряк сработал!
--- Конец цитаты ---
Потому, что М68К после каждого чтения данных инкрементирует РС. Это фишка всех (или почти всех) процессоров. ТАк что в эмуляции ее обычно повторяют, чтобы было легче следить за РС и не заботиться об размерности команды (РС сам станет нужным в нужный момент).
ЯковлевВиктор:
тогда мне надо вычислить на сколько надо откатить РС, чтобы я попал на предыдущую команду! Пока не знаю как это сделать? Как определить? есть идеи?
evgeny:
Глючит дебаг. И код команды неверный показан в отличие од команды ассемблера, и бряк нельзя поставить к примеру на $00C00000. Или только строго на FF можно? Хотелось бы на весь спектр, если это не сложно. Ну хоть уже кое-что.
ЯковлевВиктор:
почему нельзя, можно....имелось ввиду 6-и значное нех число от 000000-FFFFFF! Да коды команды походу иногда не правильно, это я переделаю - я их вычисляю и походу иногда не правильно вычисляются так что буду непосредственно из рома вытаскивать!

А в чем глючит? С этого места по-пододробнее желательно с примером?
Все очень сыро пока - наваял буквально за пару дней!
HardWareMan:
Воспользуйся моей сводной таблицей команд М68К. Этого достаточно для показа. Вычислить откат будет либо трудно, либо невозможно. Попытайся все же отследить в эмуле. А лучше, введи переменную, которая будет хранить адрес предыдущей команды. При срабатывании бряка ты ее и заюзаешь. ;)
ЯковлевВиктор:
Ха спасибо HardWareMan за РС - отследил в эмуле
http://slil.ru/25670325
нового:
1)четкое разделение какой именно бряк сработал: чтение, запись,РС если выбрали несколько типов
2)показывает именно то место где сработал бряк!
3)Виювер всей памяти 68000!
4)исправил показ кода команды
отпишите че там еще неправильно работает?
HardWareMan:
Моноширные шрифты юзай. Адрес команды пиши полностью, все 6 цифр, ато запарка будет. А вот печать кода - это тру, помогает реально глазами отслеживать.
HoRRoR:
Не вижу смысла ставить откат, ибо инструкция будет уже выполнена. Выжу смысл отвести отдельную переменную под предыдущее значение PC.
GManiac:
Это хорошо, что ты доделываешь дебуггер, но можно ведь обратить внимание на мелкие косяки вроде квадратов в конце строк (там для переноса строки, наверно, пишется 0A, а не 0D0A), нерабочие кнопки закрытия окон (крестик в углу окна) и т.д. Окна с командами и всей памятью просто копируют обычный чёрный дебуггер, так? Можно во вьюере памяти сделать строки по 16 байт, а то эти 12 байт уже достали... Ладно, это мелочи.
Мне показалось, что брекпоинт не срабатывает, оказалось, это окошко смотрит на регистр букв: например, вводишь fff9d0, а оно потом выдаёт 7EE7990.
...Насколько я понимаю, там ставится что-то вроде Hardware Breakpoint на ячейку памяти самого Генса, за счёт этого Генс не тормозит при проверке бряка. И поэтому бряк срабатвыает уже после обращения к ячейке. Хотя я могу ошибаться... Если сделать так, чтобы эффективный адреса вычислялся до выполнения команды, наверно, появятся тормоза. Да и код менять надо.

Я скомпилил Gens 2.10 от Никодима, проблема была в маленькой заморочке.
Во-первых, Starscream не есть эмулятор 68k в чистом виде. Батник в исходнике запускает полученный из Старскрима экзешник, который генерирует асмовый файл на 2 метра для насма - это и есть эмулятор. Почему VS ругался на отстутствующие main68k и sub68k.obj - оказалось, батники чуть кривые, и obj не появлялись в нужной папке. А когда я дал ему obj, полученные из сишного файла, ругался потому, что это не сам эмулятор (см. выше).
Поэтому вот инструкция, если кому интересно:
1. Билдим оба проекта star.dsw в папке Starscream.
2. Правим оба батника: в 5-й строчке надо добавить в начале "..\..\..", получится:
..\..\..\nasm\nasmw -f win32 temp.asm -o ..\..\..\gens\release\main68k.obj
и
..\..\..\nasm\nasmw -f win32 temp.asm -o ..\..\..\gens\release\sub68k.obj
Запускаем батники.
3. Если nasmw не добавлен в VS, надо Tools -> Options -> Directories, справа выбрать Executable Files и добавить путь к nasmw.exe
4. Открыть главный проект gens.dsw, правый клик на папке ASM Sources, Settings, в окне Commands пишем
--- Код: ---nasmw -i $(InputDir) $(InputDir)\$(InputName).asm -f win32 -o $(OutDir)\$(InputName).obj
--- Конец кода ---
, в Outputs:

--- Код: ---$(OutDir)\$(InputName).obj
--- Конец кода ---
На вкладке General ставим верхнюю галочку, а для файлов *.inc из папки ASM Sources ставим галочку "Exclude file from build".
5. Билдим генс.

ЯковлевВиктор, сможешь добавить Никодимовский поиск читов в ГенсТрейсер и вернуть Tab для хардрезета системы?

Добавлено позже:
Зато вот VS 2003 спотыкается на zlib.lib :(
CaH4e3:
В генстрейсере встроен читовой движок от FCEUltra и вызывается кнопками 1, 2, 3. Либа Злиб и хтмлхелп должны быть в папке с сырцами, соответственно они должны быть добавлены в списке подключемых библиотек в настройках линкера. Для компиляции в VC2008 (не пробовал на ранних), надо в кайлере в определении типа импортируемой из ДЛЛ функции добавить int, а в асмовом коде с misc функциями, в процедуре вывода строки на экран закоментить запись нуля в конец строки - функция перестраховывается и пишет конец строки сама, но когда компилятор делает вызов этой функции с константной строкой в параметре, он выставляет защиту на ее конец и при обращении туда она срабатывает.
ЯковлевВиктор:
http://slil.ru/25673506
нового:
1)добавлен поиск кодов
2)вьювер по 16 байт
3)бряки на диапазон от 00000000-FFFFFFFF! И ввод соответсвенно как 8-ми значка 00FF9C11!
ЯковлевВиктор:
http://slil.ru/25677161
нового:
1)до 5 бряков на запись, чтение и РС
2)поддержка хака Кабала
evgeny:
Может тогда и с Gens Kmod инструменты взять?
Исходники были тут: http://www.spritesmind.net/_GenDev//
ЯковлевВиктор:
кое что могу прикрутить, но там сложнее - там уже динамическое обновление - получится ли воспроизвести фиг знает!
HardWareMan:
Меня никто не слушает? Сделайте МОНОШИРНЫЕ шрифты в окне дизасма и дампа. ДА и вообще, где используется хекс. Courrier New подходит и есть у всех.
ЯковлевВиктор:
слышу слышу, просто первый раз слышу понятие МОНОШИРНЫЕ шрифты! не знал как называеся!

Добавлено позже:
http://slil.ru/25677885
вот теперь со шрифтами Courrier New. интересно с этим шрифтом решилась проблема с разной длиной строк в редакторе- ща все ровно!
HardWareMan:

--- Цитата: ЯковлевВиктор от 11 Апрель 2008, 12:45:24 ---интересно с этим шрифтом решилась проблема с разной длиной строк в редакторе- ща все ровно!
--- Конец цитаты ---
Для ЭТОГО и просил. ;) "Моноширными" называются шрифты, у которых все символы имеют одинаковую ширину. Шрифты с символами с разной шириной называют "TrueType".
Посмотри, откуда берутся квадратики (непечатные символы) в конце каждой строки. Если слева (где регистры) ты используешь лэбы (Label), то свойство Caption требует PChar массив или просто строка, терминированная кодом 0х00. Если в окне дизасма ты юзаешь мемо, то лучше сделать метод .Lines.Clear, а затем добавлять строки .Lines.Add(), передавая ему все тот же PChar. Хотя, дело, конечно, твое, но квадратики надо убрать. Используй отладчик на свой отладчик (Бугага, тафталогия), чтобы выяснить откуда он берется.
HoRRoR:
И не забрасывай плиз проект, очень стоящее дело делаешь :)

Добавлено позже:
З.Ы. Окно дебаггера появляется относительно окна эмуля. Если эмуль в верху экрана - то окно появляется не полностью (верхняя часть за границами экрана) и передвинуть нельзя.

Добавлено позже:
З.З.Ы. Я бы сделал неограниченное число бряков и их список вместо нескольких возможных. Хотя бы, например, чтобы максимальное число бряков было 255.
Конечно, мелочи, но всё же...

Добавлено позже:
З.З.З.Ы. Убери плиз зависимость hex-значения от количества символов и их регистра.

Добавлено позже:
З.З.З.З.Ы. Я бы добавил в память хотя бы GoTo и dump/load, причём обычный дамп (например, дампит всю оперативку в файл <эмуль>\dump\ram.bin, а vram в <эмуль>\dump\vram.bin) и выборочный (выбирается файл и область дампа). Это очень удобно.
Ещё бы нелохо было бы добавить возможность редакторовать память, то бишь поменять листбокс на полноценный вьювер.

Добавлено позже:
З.З.З.З.З.Ы. Куда делся ресет? оО

Добавлено позже:
З.З.З.З.З.З.Ы. При срабатывании бряка звук "зацикливает"...

Добавлено позже:
7*З.Ы. Листинг кода, во-первых, маловат, а во вторых так не пойдёт, надо сделать GoTo и возможность просмотра любого места в любой памяти. То бишь дизассемблить не только при открытии дебаггера.

Добавлено позже:
8*З.Ы. Какой же без бряков на регистры дебаггер? :)
Rumata:

--- Цитата: ЯковлевВиктор ---первый раз слышу понятие МОНОШИРНЫЕ шрифты!
--- Конец цитаты ---
Я тоже!  :wow: Вообще-то они называются МОНОШИРИННЫЕ  :lol:
Навигация
Главная страница сообщений
Следующая страница

Перейти к полной версии