| Предыдущая тема :: Следующая тема   | 
	
	
	
		| Автор | 
		Сообщение | 
	
	
		Griever RRC2008
  
  
  Зарегистрирован: 15.07.2005 Сообщения: 112 Откуда: Н.Новгород
  | 
		
			
				 Добавлено: Пн Дек 19, 2005 2:55 pm    Заголовок сообщения: Бряк на кнопку [?] | 
				     | 
			 
			
				
  | 
			 
			
				Здрасте! недавно понадобилось в отладчике на NES сделать так чтобы останов произошел сразу после нажатия кнопки(в
 
моем случае START), заглянул в документацию - вроде опрос джойстиков чисто программный[Через порт $4016 для 1-го
 
джойстика] поставил бряк на запись в порт - естессно в порт пишется $FF несколько сот раз в секунду - пробовал
 
использовать Conditional Breakpoints - никакого эффекта. Может я чего-то не так делаю?    стопудово должен быть способ
 
заставить игру встать после нажатия START! _________________
   | 
			 
		  | 
	
	
		| Вернуться к началу | 
		 | 
	
	
		  | 
	
	
		Ghost
 
  
  Зарегистрирован: 24.04.2004 Сообщения: 237
 
  | 
		
			
				 Добавлено: Вт Дек 27, 2005 9:22 pm    Заголовок сообщения:  | 
				     | 
			 
			
				
  | 
			 
			
				Скажи, что за игра.
 
В ФСЕУшном дебаггере не очень удобно взламывать кнопку: скажем, меняешь значение регистра A на нужное (пусть Start), а оно всё равно не срабатывает. Приходится ломать в нужный момент адрес оперативки, куда пишется кнопка. | 
			 
		  | 
	
	
		| Вернуться к началу | 
		 | 
	
	
		  | 
	
	
		Griever RRC2008
  
  
  Зарегистрирован: 15.07.2005 Сообщения: 112 Откуда: Н.Новгород
  | 
		
			
				 Добавлено: Вт Дек 27, 2005 10:35 pm    Заголовок сообщения:  | 
				     | 
			 
			
				
  | 
			 
			
				Скажем, Dick Tracy. А какой за адрес оперативки? есть только один порт 4016 _________________
   | 
			 
		  | 
	
	
		| Вернуться к началу | 
		 | 
	
	
		  | 
	
	
		Ghost
 
  
  Зарегистрирован: 24.04.2004 Сообщения: 237
 
  | 
		
			
				 Добавлено: Ср Дек 28, 2005 3:40 pm    Заголовок сообщения:  | 
				     | 
			 
			
				
  | 
			 
			
				Любая нормальная игра после обработки порта записывает текущую кнопку в оперативку в пару адресов, хотя бы для будущего использования: например, чтобы определить, была ли нажата кнопка ДО текущего момента и т.д.
 
Для Dick Tracy ставь бряк на чтение $375 или на выполнение $C76D. Как только нажмёшь кнопку - попадёшь в дебаггер. | 
			 
		  | 
	
	
		| Вернуться к началу | 
		 | 
	
	
		  | 
	
	
		Griever RRC2008
  
  
  Зарегистрирован: 15.07.2005 Сообщения: 112 Откуда: Н.Новгород
  | 
		
			
				 Добавлено: Ср Дек 28, 2005 7:51 pm    Заголовок сообщения:  | 
				     | 
			 
			
				
  | 
			 
			
				Спасибо большое, еще бы узнать как ты это нашел =) _________________
   | 
			 
		  | 
	
	
		| Вернуться к началу | 
		 | 
	
	
		  | 
	
	
		Ghost
 
  
  Зарегистрирован: 24.04.2004 Сообщения: 237
 
  | 
		
			
				 Добавлено: Ср Дек 28, 2005 8:04 pm    Заголовок сообщения:  | 
				     | 
			 
			
				
  | 
			 
			
				| Можно посмотреть в самом дебаггере, в какой адрес записывается текущая кнопка. Но можно открыть окно с памятью, так чтобы видно было всё окно, и нажимать в игре кнопки - какие-то адреса в памяти будут меняться соответственно кнопкам. Вот я заметил, что по адресам $000A, $000C и $000E устанавливается значение кнопки (там есть ещё другие адреса, но они не нужны). Поставил бряк на чтение $E и оттуда уже вышел к чтению $375. | 
			 
		  | 
	
	
		| Вернуться к началу | 
		 | 
	
	
		  | 
	
	
		Griever RRC2008
  
  
  Зарегистрирован: 15.07.2005 Сообщения: 112 Откуда: Н.Новгород
  | 
		
			
				 Добавлено: Ср Дек 28, 2005 10:47 pm    Заголовок сообщения:  | 
				     | 
			 
			
				
  | 
			 
			
				спасибо =) _________________
   | 
			 
		  | 
	
	
		| Вернуться к началу | 
		 | 
	
	
		  | 
	
	
		ZURG
 
 
  Зарегистрирован: 13.03.2008 Сообщения: 7
 
  | 
		
			
				 Добавлено: Чт Мар 13, 2008 4:26 pm    Заголовок сообщения:  | 
				     | 
			 
			
				
  | 
			 
			
				Здрасте ромхакеры. 
 
У меня возникла одна проблема, и я честно пытался решить её методом научного тыка. Но у меня нечего не вышло, и теперь приходится задавать глупые вопросы. Вобщем мне надо взломать кнопку. А точнее - найти код отвечающий за какиелибо действия после нажатия кнопок. К примеру как найти TMNT3(черепашки ниндзя 3) процедуру прыжка или удара? | 
			 
		  | 
	
	
		| Вернуться к началу | 
		 | 
	
	
		  | 
	
	
		Shredder
 
  
  Зарегистрирован: 20.02.2007 Сообщения: 73 Откуда: Россия, Самара.
  | 
		
			
				 Добавлено: Чт Мар 13, 2008 4:36 pm    Заголовок сообщения:  | 
				     | 
			 
			
				
  | 
			 
			
				| Интересно, а для чего тебе это? | 
			 
		  | 
	
	
		| Вернуться к началу | 
		 | 
	
	
		  | 
	
	
		HoRRoR RRC2008
  
  
  Зарегистрирован: 21.06.2006 Сообщения: 2341 Откуда: Ростов-на-Дону
  | 
		
			
				 Добавлено: Чт Мар 13, 2008 4:40 pm    Заголовок сообщения:  | 
				     | 
			 
			
				
  | 
			 
			
				Не знаю, как на NES, но на GBA я ставил бряк на считывание байта, в котором хранится инфа о нажатых кнопках, а дальше скакал по процедурам. _________________ Работаю за деньги
 
KILL ALL HUMANS!!!!!111 | 
			 
		  | 
	
	
		| Вернуться к началу | 
		 | 
	
	
		  | 
	
	
		Chronix RRC2008
  
  
  Зарегистрирован: 27.12.2003 Сообщения: 288 Откуда: CYBERIA
  | 
		
			
				 Добавлено: Чт Мар 13, 2008 6:11 pm    Заголовок сообщения:  | 
				     | 
			 
			
				
  | 
			 
			
				 	  | HoRRoR писал(а): | 	 		  | Не знаю, как на NES, но на GBA я ставил бряк на считывание байта, в котором хранится инфа о нажатых кнопках, а дальше скакал по процедурам. | 	  
 
Точно так.  
 
Опрос джойстиков происходит ч/з регистр 4016h (4017h - для второго порта), так что ставь бряк на запись в регистр 4016h, чтобы поймать момент формирования строба, и тогда ты без труда попадешь на самое начало подпрограммы опроса джойстиков.   | 
			 
		  | 
	
	
		| Вернуться к началу | 
		 | 
	
	
		  | 
	
	
		HoRRoR RRC2008
  
  
  Зарегистрирован: 21.06.2006 Сообщения: 2341 Откуда: Ростов-на-Дону
  | 
		
			
				 Добавлено: Чт Мар 13, 2008 7:26 pm    Заголовок сообщения:  | 
				     | 
			 
			
				
  | 
			 
			
				Самая *опа - когда таких процедур тьма тьмущая, и среди них надо найти одну единственную... _________________ Работаю за деньги
 
KILL ALL HUMANS!!!!!111 | 
			 
		  | 
	
	
		| Вернуться к началу | 
		 | 
	
	
		  | 
	
	
		ZURG
 
 
  Зарегистрирован: 13.03.2008 Сообщения: 7
 
  | 
		
			
				 Добавлено: Вс Мар 23, 2008 12:35 pm    Заголовок сообщения:  | 
				     | 
			 
			
				
  | 
			 
			
				 	  | Chronix писал(а): | 	 		   	  | HoRRoR писал(а): | 	 		  | Не знаю, как на NES, но на GBA я ставил бряк на считывание байта, в котором хранится инфа о нажатых кнопках, а дальше скакал по процедурам. | 	  
 
Точно так.  
 
Опрос джойстиков происходит ч/з регистр 4016h (4017h - для второго порта), так что ставь бряк на запись в регистр 4016h, чтобы поймать момент формирования строба, и тогда ты без труда попадешь на самое начало подпрограммы опроса джойстиков.   | 	  
 
Нечего я там в коде не понял, в ассемблере почти не разбираюсь. Объясните пожалуйста как на кнопку селект повесить какую нибудь команду. Если это конечно вообще возможно. | 
			 
		  | 
	
	
		| Вернуться к началу | 
		 | 
	
	
		  | 
	
	
		HoRRoR RRC2008
  
  
  Зарегистрирован: 21.06.2006 Сообщения: 2341 Откуда: Ростов-на-Дону
  | 
		 | 
	
	
		| Вернуться к началу | 
		 | 
	
	
		  | 
	
	
		ZURG
 
 
  Зарегистрирован: 13.03.2008 Сообщения: 7
 
  | 
		
			
				 Добавлено: Пн Мар 24, 2008 9:45 am    Заголовок сообщения:  | 
				     | 
			 
			
				
  | 
			 
			
				 	  | HoRRoR писал(а): | 	 		  | Это возможно, если сперва разобраться в ассемблере. | 	  
 
Я и не сомневаюсь. Просто хотелось уточнить. Но мне бы хотелось увидеть пример хотя бы с переназначением одной клавиши на другую, дальше я бы разобрался сам. А вообще я хочу в TMNT3 сделать смену черепах кнопкой селект прямо в процессе игры, а не только когда тебя убивают. | 
			 
		  | 
	
	
		| Вернуться к началу | 
		 | 
	
	
		  | 
	
	
		HoRRoR RRC2008
  
  
  Зарегистрирован: 21.06.2006 Сообщения: 2341 Откуда: Ростов-на-Дону
  | 
		
			
				 Добавлено: Пн Мар 24, 2008 11:20 am    Заголовок сообщения:  | 
				     | 
			 
			
				
  | 
			 
			
				- Как мне написать программу?
 
- Сперва надо научиться программировать.
 
- Я и не сомневаюсь. Покажите мне на примере, я хочу написать серьезную программу. _________________ Работаю за деньги
 
KILL ALL HUMANS!!!!!111 | 
			 
		  | 
	
	
		| Вернуться к началу | 
		 | 
	
	
		  | 
	
	
		ZURG
 
 
  Зарегистрирован: 13.03.2008 Сообщения: 7
 
  | 
		
			
				 Добавлено: Пн Мар 24, 2008 11:49 am    Заголовок сообщения:  | 
				     | 
			 
			
				
  | 
			 
			
				| HoRRor, несмешно, потомучто програмировать учаться именно на примерах. И тем более я не прошу написать всё за меня. Чтобы реализовать смену черепах, надо в памяти изменить всего две ячейки - это я сделать смогу. Но вот как повесить всё это дело на кнопку я не знаю, и прошу показать на примере. А доков в сети по этому поводу нет(по крайне мере на русском языке). | 
			 
		  | 
	
	
		| Вернуться к началу | 
		 | 
	
	
		  | 
	
	
		HoRRoR RRC2008
  
  
  Зарегистрирован: 21.06.2006 Сообщения: 2341 Откуда: Ростов-на-Дону
  | 
		
			
				 Добавлено: Пн Мар 24, 2008 12:23 pm    Заголовок сообщения:  | 
				     | 
			 
			
				
  | 
			 
			
				Мда... Ты можешь понять, что если ты ничего не будешь понимать, то примеры бесполезны? Научись сперва хотя бы просто ставить бряки и понимать, что делает игра. _________________ Работаю за деньги
 
KILL ALL HUMANS!!!!!111 | 
			 
		  | 
	
	
		| Вернуться к началу | 
		 | 
	
	
		  | 
	
	
		ZURG
 
 
  Зарегистрирован: 13.03.2008 Сообщения: 7
 
  | 
		
			
				 Добавлено: Пн Мар 24, 2008 2:10 pm    Заголовок сообщения:  | 
				     | 
			 
			
				
  | 
			 
			
				Я думаю тебе не составит труда объснить мне убогому следующий код:  	  | Код: | 	 		  
 
$F928:A0 08     LDY #$08
 
$F92A:AD 16 40  LDA $4016 = #$FF
 
$F92D:85 0C     STA $000C = #$FF
 
$F92F:4A        LSR
 
$F930:05 0C     ORA $000C = #$FF
 
$F932:4A        LSR
 
$F933:36 08     ROL $08,X @ $0008 = #$40
 
$F935:AD 17 40  LDA $4017 = #$FF
 
$F938:85 0D     STA $000D = #$01
 
$F93A:4A        LSR
 
$F93B:05 0D     ORA $000D = #$01
 
$F93D:4A        LSR
 
$F93E:36 09     ROL $09,X @ $0009 = #$A0
 
$F940:88        DEY
 
$F941:D0 E7     BNE $F92A
 
$F943:60        RTS
 
 | 	  
 
 	  | Код: | 	 		  
 
$F8F2:A5 08     LDA $0008 = #$02
 
$F8F4:C5 0A     CMP $000A = #$02
 
$F8F6:D0 1C     BNE $F914
 
$F8F8:A5 09     LDA $0009 = #$00
 
$F8FA:C5 0B     CMP $000B = #$00
 
$F8FC:D0 16     BNE $F914
 
$F8FE:A2 00     LDX #$00
 
$F900:20 04 F9  JSR $F904
 
$F903:E8        INX
 
$F904:B5 08     LDA $08,X @ $000A = #$02
 
$F906:A8        TAY
 
$F907:55 FA     EOR $FA,X @ $00FC = #$00
 
$F909:35 08     AND $08,X @ $000A = #$02
 
$F90B:95 F8     STA $F8,X @ $00FA = #$02
 
$F90D:95 54     STA $54,X @ $0056 = #$02
 
$F90F:94 FA     STY $FA,X @ $00FC = #$00
 
$F911:94 56     STY $56,X @ $0058 = #$00
 
$F913:60        RTS
 
 | 	  
 
Точто мне нужно сдесь или нужно смотерть дальше? | 
			 
		  | 
	
	
		| Вернуться к началу | 
		 | 
	
	
		  | 
	
	
		АнС RRC2008
  
  
  Зарегистрирован: 08.11.2003 Сообщения: 2818
 
  | 
		
			
				 Добавлено: Пн Мар 24, 2008 2:36 pm    Заголовок сообщения:  | 
				     | 
			 
			
				
  | 
			 
			
				Первый фрагмент кода - цикл чтения кнопок из порта ввода и запись результата в ячейку памяти. Из порта 4016 пишутся 8 битов (кнопки первого джойстика) в 0C, их 4017 (кнопки второго джойстика) - в 0D.
 
 
Дальше игра не будет обращаться к портам 4016/4017, а при проверке нажатия Start она просто смотрит ячейку памяти (0C/0D).
 
 
Второй кусок кода явно не в тему.
 
 
Ни на каких примерах ты не научишься, тут надо заниматься этим плотно. | 
			 
		  | 
	
	
		| Вернуться к началу | 
		 | 
	
	
		  | 
	
	
		ZURG
 
 
  Зарегистрирован: 13.03.2008 Сообщения: 7
 
  | 
		
			
				 Добавлено: Пн Мар 24, 2008 4:59 pm    Заголовок сообщения:  | 
				     | 
			 
			
				
  | 
			 
			
				| АнС спасибо, буду разбираться. | 
			 
		  | 
	
	
		| Вернуться к началу | 
		 | 
	
	
		  | 
	
	
		ZURG
 
 
  Зарегистрирован: 13.03.2008 Сообщения: 7
 
  | 
		
			
				 Добавлено: Вт Мар 25, 2008 11:14 am    Заголовок сообщения:  | 
				     | 
			 
			
				
  | 
			 
			
				| Сделал финт ушами - впихнул свою проверку на нажатие селекта и пробный код. Всё работает, но как и следовало ожидать слишком быстро. Как можно сделать чтобы мой код выполнялся только один раз после нажатия кнопки, а не всё время пока она зажата? Думаю сделать флаг, который будет устанавливаться сразу после нажатия нужной кнопки, и обнуляться при нажатии постронних кнопок. Но может есть способ попроще? | 
			 
		  | 
	
	
		| Вернуться к началу | 
		 | 
	
	
		  | 
	
	
		АнС RRC2008
  
  
  Зарегистрирован: 08.11.2003 Сообщения: 2818
 
  | 
		
			
				 Добавлено: Вт Мар 25, 2008 2:49 pm    Заголовок сообщения:  | 
				     | 
			 
			
				
  | 
			 
			
				Напиши свой код, который добавил.
 
В игре помимо 0C/0D должны быть ещё две ячейки рядом, которые XOR'ятся с предыдущими значениями состояния джойстика. В итоге операции EOR остаются только кнопки, нажатые в данный момент, в следующем кадре они не будут считаться нажатыми, пока не отпустишь кнопку и не нажмёшь снова. | 
			 
		  | 
	
	
		| Вернуться к началу | 
		 | 
	
	
		  | 
	
	
		KDEboroda
 
 
  Зарегистрирован: 13.11.2015 Сообщения: 2 Откуда: СССР
  | 
		
			
				 Добавлено: Пт Ноя 13, 2015 2:11 pm    Заголовок сообщения: Отладчик SMD - останов по нажатию клавиши. | 
				     | 
			 
			
				
  | 
			 
			
				Работаю над игрой Operation Europe - Path to Victory (1939-1945) (SMD).
 
Есть тема на emu-land . net по адресу / forum / index.php?topic=27971.120 (убрать пробелы, если интересно)
 
Задача: пропустить экран установки параметров командиров, чтобы изначально задать их жёстко и назначать команду себе из уже готовых.
 
Что делаю: в отладчике ставлю точку останова на чтение последней (перед экраном изменения параметров) строки текста, далее по одной команде выполняю - и попал в какой-то замкнутый цикл. Нужно посмотреть, что происходит после нажатия кнопки "C" любого джойстика. И там соответственно пропустить эту часть, чтобы сразу появился экран назначения на должности.
 
Предполагаю, что можно поступить аналогично тому, что тут описано: отслеживать память по нажатию кнопок, затем ставить точки останова на эти места в памяти.
 
Есть ещё варианты?
 
P.S. Кстати, пока что не нашёл, где нажатие кнопок меняет память.   | 
			 
		  | 
	
	
		| Вернуться к началу | 
		 | 
	
	
		  | 
	
	
		 |