| Разработка и ромхакинг > Ромхакинг и программирование |
| Мод 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: |
| Навигация |
| Главная страница сообщений |
| Следующая страница |