  | 
				shedevr.org.ru Группа перевода приставочных игр "ШЕДЕВР"   
				 | 
			 
		 
		 
	
		| Предыдущая тема :: Следующая тема   | 
	 
	
	
		| Автор | 
		Сообщение | 
	 
	
		Otter
 
  
  Зарегистрирован: 12.12.2006 Сообщения: 121 Откуда: Москва
  | 
		
			
				 Добавлено: Ср Дек 13, 2006 12:55 am    Заголовок сообщения: Как в Nuts & milk-е взломать кнопку select? | 
				     | 
			 
			
				
  | 
			 
			
				Вопрос такой. Мне нужно в Milk-nuts-е отследить нажатие select-а (в уровне), чтобы при нём не шла инкрементация уровня (своими усилиями я смог только найти только эту подпрограмму, но не откуда она вызывается. Причём анализ кода с опроса $4016 тоже ничего не дал - он вызывается кучу раз в секунду, и невозможно зафиксировать именно нажатие select-а), а процесс переходил сначала на фильтр, позволяющий инкрементировать только на конкретных уровнях. Кто имеет опыт взлома Famicom-ных игр, помогите. _________________ на этом я кончаю свой рассказ, и кошку задавил КамАЗ
  Последний раз редактировалось: Otter (Пн Апр 23, 2007 10:02 pm), всего редактировалось 2 раз(а) | 
			 
		  | 
	 
	
		| Вернуться к началу | 
		 | 
	 
	
		  | 
	 
	
		-=#Griever#=- Гость
 
 
 
 
 
  | 
		
			
				 Добавлено: Ср Дек 13, 2006 5:12 pm    Заголовок сообщения:  | 
				     | 
			 
			
				
  | 
			 
			
				Действительно процесс сравнения значений здесь организован не так очевидно, однако, в любом случае, сначала байт результата опроса джойстиков сравнивается с select:
 
$C569:A5 1A     LDA $001A = #$20
 
$C56B:29 20     AND #$20
 
$C56D:D0 F4     BNE $C563
 
$C563:A5 1A     LDA $001A = #$20
 
$C0C0:85 1C     STA $001C = #$01
 
...........
 
А потом с отпущенной кнопкой, и только после этого производится увеличение номера уровня на один
 
 
$C2FC:E8        INX
 
$C2FD:86 C4     STX $00C4 = #$05
 
$C2FF:86 20     STX $0020 = #$05
 
В любом случае, стоит заNOP'ить INX. Ну или XVNKGXEV в виде Game genie кода.
 
 
PS: Очень давно хотел спросить: почему это после $C563 игра сразу перескакивает на $C0C0, правда после огромного числа повторений кода, приведённого выше. Такие вещи встречаются во многих играх. Вроде, команды-то не было...   | 
			 
		  | 
	 
	
		| Вернуться к началу | 
		 | 
	 
	
		  | 
	 
	
		Otter
 
  
  Зарегистрирован: 12.12.2006 Сообщения: 121 Откуда: Москва
  | 
		
			
				 Добавлено: Пт Дек 15, 2006 3:36 pm    Заголовок сообщения:  | 
				     | 
			 
			
				
  | 
			 
			
				Уже прогресс, но нужно не это....
 
По адресам $C569 он крутится, ожидая, не будет ли нажато и start, чтобы пойти на $C576 -> $DB52 и там либо включить паузу, либо совершить самоубийство (sel+st). Я так понимаю, он где-то перед этим устанавливает таймерное прерывание, которое (если не будет нажато start) и перебрасывает его на $C0C0. Но там он ещё зачем-то крутится и продолжает опрашивать $4016. А я хочу понять, где он окончательно решает инкрементировать уровень. То-есть такое место, которое выполняется только при нажатии и отпускании select, но не при обычном прохождении уровня. NOP-ить INX нельзя, так как эта инструкция выполняется и при обычном прохождении! _________________ на этом я кончаю свой рассказ, и кошку задавил КамАЗ | 
			 
		  | 
	 
	
		| Вернуться к началу | 
		 | 
	 
	
		  | 
	 
	
		АнС RRC2008
  
  
  Зарегистрирован: 08.11.2003 Сообщения: 2818
 
  | 
		
			
				 Добавлено: Пт Дек 15, 2006 9:16 pm    Заголовок сообщения:  | 
				     | 
			 
			
				
  | 
			 
			
				C2ED - проверка на 32, если не равно (может быть только меньше), то прыгает на увеличение. Нашёл за полминуты так: сначала увидел, что номер уровня хранится в ячейке 00C4, поставил бряк (пользуюсь только FCEU 0.98.15, так как frame advance заменяет десяток инструментов FCEUXD) и пролистнул код чуть выше инструкции STX C4.
 
 
 
 	  | -=#Griever#=- писал(а): | 	 		  PS: Очень давно хотел спросить: почему это после $C563 игра сразу перескакивает на $C0C0, правда после огромного числа повторений кода, приведённого выше. Такие вещи встречаются во многих играх. Вроде, команды-то не было...   | 	  
 
 
Неужели не знаешь про NMI???   | 
			 
		  | 
	 
	
		| Вернуться к началу | 
		 | 
	 
	
		  | 
	 
	
		-=#Griever#=- Гость
 
 
 
 
 
  | 
		
			
				 Добавлено: Пт Дек 15, 2006 11:55 pm    Заголовок сообщения:  | 
				     | 
			 
			
				
  | 
			 
			
				 	  | Цитата: | 	 		  | Неужели не знаешь про NMI??? | 	  
 
D'oh! Действительно прерывание (16 битный вектор в FFFA не просто так дан  ) Спасибо.
 
 
 	  | Цитата: | 	 		  | C2ED - проверка на 32, если не равно (может быть только меньше), то прыгает на увеличение. | 	  
 
А? Как это поможет нам не увеличивать уровень только при нажатии на select? Думаю и без проверки ясно, что это банальный тест на максимальный уровень.
 
 
А вот то что нужно Otter'у, так это по адресу 0x584 в РОМе вписать два байта: $01 $С3. Должно работать как надо. | 
			 
		  | 
	 
	
		| Вернуться к началу | 
		 | 
	 
	
		  | 
	 
	
		Griever RRC2008
  
  
  Зарегистрирован: 15.07.2005 Сообщения: 112 Откуда: Н.Новгород
  | 
		
			
				 Добавлено: Сб Дек 16, 2006 12:19 am    Заголовок сообщения:  | 
				     | 
			 
			
				
  | 
			 
			
				 	  | Цитата: | 	 		  | пользуюсь только FCEU 0.98.15, так как frame advance заменяет десяток инструментов FCEUXD | 	  
 
 
Действительно интересно. Я думал, frame advance нужен только для прохождений на скорость! Не расскажешь как его используют в целях ромхакинга? _________________
   | 
			 
		  | 
	 
	
		| Вернуться к началу | 
		 | 
	 
	
		  | 
	 
	
		АнС RRC2008
  
  
  Зарегистрирован: 08.11.2003 Сообщения: 2818
 
  | 
		
			
				 Добавлено: Сб Дек 16, 2006 12:43 am    Заголовок сообщения:  | 
				     | 
			 
			
				
  | 
			 
			
				 	  | -=#Griever#=- писал(а): | 	 		  | А? Как это поможет нам не увеличивать уровень только при нажатии на select? Думаю и без проверки ясно, что это банальный тест на максимальный уровень. | 	  
 
 
Ну так вместо условного перехода вставить безусловный - игра при нажатии SELECT всегда будет думать, что это 50-й уровень, и не станет переключать его.
 
 
 
 	  | Griever писал(а): | 	 		   	  | Цитата: | 	 		  | пользуюсь только FCEU 0.98.15, так как frame advance заменяет десяток инструментов FCEUXD | 	  
 
 
Действительно интересно. Я думал, frame advance нужен только для прохождений на скорость! Не расскажешь как его используют в целях ромхакинга? | 	  
 
 
Покадровое исполнение - очень мощная штука. Это словами не объяснить, понимание приходит с опытом.
 
При покадровой игре происходит как бы переход на микроуровень - появляются совершенно новые возможности, например, т.к. большинство игр синхронизирует (по крайней мере пытается) главный цикл с VBLANK, можно дискретизировать игровой процесс на ряд чётко определённых состояний. Если попроще, то непрерывная видеоигра превращается в дискретный ряд скриншотов - у каждого скриншота своя RAM, и можно рассматривать игру не как нечто живое/неизведанное, а как чистый набор состояний памяти.
 
Соответственно, сильно расширяются возможности анализа игрового кода, а ведь суть реверс-инжиниринга в анализе.
 
Пример: чтобы найти то, не знаю что, нужно всего лишь сравнить два дампа памяти на один и тот же момент игры (для чего существует Frame Counter) - первый дамп предопределяет, скажем, нежелательное будущее, а второй - желательное. Можно кусками записывать "хорошую" память в "плохую" и в результате точно найти ряд нужных ячеек, потом уже бряки на них и т.д. Памяти у NES мало, так что процесс не затягивается более 10-15 минут. Главное - понимать суть работы игровой программы, и при наличии фантазии Frame Advance откроет ещё кучу возможностей.
 
 
Конечно, без бряков всё равно не обойтись, но они есть в любом FCEU.
 
 
Единственная полезная фича FCEUXD - трейсер исполненного кода, больше не припомню там ничего незаменимого. | 
			 
		  | 
	 
	
		| Вернуться к началу | 
		 | 
	 
	
		  | 
	 
	
		-=#Griever#=- Гость
 
 
 
 
 
  | 
		
			
				 Добавлено: Сб Дек 16, 2006 3:27 pm    Заголовок сообщения:  | 
				     | 
			 
			
				
  | 
			 
			
				Здорово. Думаю, это и есть твой секретный метод поиска ячеек, о котором ты говорил в теме про TMNT tournament fighters (бесконечное сражение со Шредером).   | 
			 
		  | 
	 
	
		| Вернуться к началу | 
		 | 
	 
	
		  | 
	 
	
		Otter
 
  
  Зарегистрирован: 12.12.2006 Сообщения: 121 Откуда: Москва
  | 
		
			
				 Добавлено: Вс Дек 17, 2006 1:25 am    Заголовок сообщения:  | 
				     | 
			 
			
				
  | 
			 
			
				 	  | -=#Griever#=- писал(а): | 	 		  
 
А вот то что нужно Otter'у, так это по адресу 0x584 в РОМе вписать два байта: $01 $С3. Должно работать как надо. | 	  
 
 
Такой вариант лучше чем ничего, но всё-таки не совсем то. Так при нажатии уровень гаснет и начинается с начала, а нужно чтоб вообще ничего не происходило. Надо зафиксировать ещё более раннее место, до выполнения $C563,  где программа определяется, что нажато select. Токо я не могу понять где.... _________________ на этом я кончаю свой рассказ, и кошку задавил КамАЗ | 
			 
		  | 
	 
	
		| Вернуться к началу | 
		 | 
	 
	
		  | 
	 
	
		АнС RRC2008
  
  
  Зарегистрирован: 08.11.2003 Сообщения: 2818
 
  | 
		
			
				 Добавлено: Вс Дек 17, 2006 2:38 am    Заголовок сообщения:  | 
				     | 
			 
			
				
  | 
			 
			
				Тогда по адресу 583 пропиши три NOP (EA) - SELECT будет убивать даже без START (честно говоря, не знал о такой фиче, а ведь иногда в этой паззловой игре бывают тупиковые ситуации). Если вписать шесть NOP подряд, то затрёшь и второй JMP, так что SELECT будет включать паузу (но не выключать). Очень странная там система опроса управления и работы с памятью вообще.
 
 
 
 	  | -=#Griever#=- писал(а): | 	 		  Здорово. Думаю, это и есть твой секретный метод поиска ячеек, о котором ты говорил в теме про TMNT tournament fighters (бесконечное сражение со Шредером).   | 	  
 
 
Это один из вариантов применения инструмента.   | 
			 
		  | 
	 
	
		| Вернуться к началу | 
		 | 
	 
	
		  | 
	 
	
		Гость
 
 
 
 
 
 
  | 
		
			
				 Добавлено: Вс Дек 17, 2006 9:23 am    Заголовок сообщения:  | 
				     | 
			 
			
				
  | 
			 
			
				АнС, ты мне советуешь мне на самом деле то же, что Griever - убрать переход с $C573 на процедуру увеличения уровня. Только Griever говорил прыгать оттуда на конец процедуры увеличения, а ты - фактически, перейти на процедуру убийства. Но мне-то надо, чтобы sel+st убивало, а sel не приводило даже к гашению экрана.
 
 
 
Нашёл, как сделать, чтобы при select ничо не происходило - в $C55D "BNE $C560" заменить на "BNE C55F", но тогда select вообще перестаёт действовать, и нельзя самоубиться, так что это не подходит....
 
 
Вроде НАШЁЛ!!!!!! Тыц-тыц.... С $C565 буду прыгать на мой фильтр, а с него: если можно инкрементировать - на $C2CB, как обычно, если нельзя - НА $C55F!!!! - это покидание процедуры опроса sel-st! Единственное, надо будет собственноручно обратно включить музычку, но тут я думаю по аналогии - $C560: $F31B - выключение, наверно над ней $F2E4 располагается включение, в общем посмотрю.
 
 
 
ДРУГОЙ ВОПРОС!
 
Где мне разместить мой фильтр? Надо примерно 71 байт. Конечно можно в уровнях, но так мне придётся урезать их количество. Кто-нито может сказать, есть ли такой отладчик, позволяющий
 
визуально наблюдать, какой код никогда не трогается? Тогда бы я в него запихнул. | 
			 
		  | 
	 
	
		| Вернуться к началу | 
		 | 
	 
	
		  | 
	 
	
		Otter
 
  
  Зарегистрирован: 12.12.2006 Сообщения: 121 Откуда: Москва
  | 
		
			
				 Добавлено: Вс Дек 17, 2006 9:26 am    Заголовок сообщения:  | 
				     | 
			 
			
				
  | 
			 
			
				Это я был! Чёрт, автовход отрубился. _________________ на этом я кончаю свой рассказ, и кошку задавил КамАЗ | 
			 
		  | 
	 
	
		| Вернуться к началу | 
		 | 
	 
	
		  | 
	 
	
		АнС RRC2008
  
  
  Зарегистрирован: 08.11.2003 Сообщения: 2818
 
  | 
		
			
				 Добавлено: Вс Дек 17, 2006 4:46 pm    Заголовок сообщения:  | 
				     | 
			 
			
				
  | 
			 
			
				 	  | Anonymous писал(а): | 	 		  | АнС, ты мне советуешь мне на самом деле то же, что Griever - убрать переход с $C573 на процедуру увеличения уровня. Только Griever говорил прыгать оттуда на конец процедуры увеличения, а ты - фактически, перейти на процедуру убийства. Но мне-то надо, чтобы sel+st убивало, а sel не приводило даже к гашению экрана. | 	  
 
 
Я тебе предлагал вариант, когда SELECT убивает, и всё. Во многих играх, где есть такая функция, именно кнопка SELECT за неё отвечает. Пример - Hi no Tori, там тоже возможны тупиковые ситуации. 
 
 
 
 	  | Anonymous писал(а): | 	 		  | Где мне разместить мой фильтр? Надо примерно 71 байт. Конечно можно в уровнях, но так мне придётся урезать их количество. Кто-нито может сказать, есть ли такой отладчик, позволяющий визуально наблюдать, какой код никогда не трогается? Тогда бы я в него запихнул. | 	  
 
 
Такого нет, и не может быть. Даже если установить бряк на чтение части кода и так пройти всю игру, ты не можешь быть уверен, что эта часть нигде не используется. Лучше разыщи свободное место (забитое нулями или FF). Хотя откуда столько кода - 71 байт??
 
 
А кстати, для чего тебе всё это? Собираешься сделать вторую часть с гиперсложными/хитрозакрученными паззлами?   | 
			 
		  | 
	 
	
		| Вернуться к началу | 
		 | 
	 
	
		  | 
	 
	
		Otter
 
  
  Зарегистрирован: 12.12.2006 Сообщения: 121 Откуда: Москва
  | 
		
			
				 Добавлено: Пн Дек 18, 2006 4:54 am    Заголовок сообщения:  | 
				     | 
			 
			
				
  | 
			 
			
				 	  | АнС писал(а): | 	 		  
 
Такого нет, и не может быть. Даже если установить бряк на чтение части кода и так пройти всю игру, ты не можешь быть уверен, что эта часть нигде не используется. Лучше разыщи свободное место (забитое нулями или FF). Хотя откуда столько кода - 71 байт??
 
 
А кстати, для чего тебе всё это? Собираешься сделать вторую часть с гиперсложными/хитрозакрученными паззлами?   | 	  
 
 
Ну воще-то если пройти всё и скрупулёзно пропробовать все действия, можно быть на 97% уверенным, что остальной код не трогается. В том-то и дело, что код игры (не считая графики) занимает ровно 16 КБ, а фрагментов, заполненных одними 0-ями и т. п. воще нету! Как у автора могли все идеи идеально лечь в 16384 байта? Уж 80-то неиспользованных байт должно было остаться. А надо примерно столько: LDA, (CMP + BNE) * 15, JMP * 2 (и может ещё кое-какой код по включению музыки).
 
 
Хе-хе, не *собираюсь*. У меня уже готов набор навороченных уровней и программа подшивки их в игру. Осталось только асм доделать (и позвонить одному бывшему однокласснику, которому принадлежат права на несколько уровней) и можно будет выкладывать. _________________ на этом я кончаю свой рассказ, и кошку задавил КамАЗ | 
			 
		  | 
	 
	
		| Вернуться к началу | 
		 | 
	 
	
		  | 
	 
	
		Shiru
 
 
  Зарегистрирован: 25.10.2006 Сообщения: 295 Откуда: Russia, Moscow
  | 
		
			
				 Добавлено: Пн Дек 18, 2006 5:30 am    Заголовок сообщения:  | 
				     | 
			 
			
				
  | 
			 
			
				 	  | Otter писал(а): | 	 		  | Ну воще-то если пройти всё и скрупулёзно пропробовать все действия, можно быть на 97% уверенным, что остальной код не трогается. | 	  
 
Готовых решений не встречал, но можно модифицировать какой-нибудь эмулятор с открытыми исходниками, чтобы он составлял таблицу обращений к адресам памяти. Заводим массив размером в адресное пространство ROM'а, на старте зануляем. Модифицируем операции обращения к памяти, чтобы по любому обращению к адресам ROM'а в соответствующую ячейку массива записывалась единица. По закрытию эмулятора сохраняем массив в файл. Запускаем игру, по всякому гоняем, выходим, смотрим, где остались нули. | 
			 
		  | 
	 
	
		| Вернуться к началу | 
		 | 
	 
	
		  | 
	 
	
		evgeny RRC2008
  
 
  Зарегистрирован: 08.02.2006 Сообщения: 188
 
  | 
		
			
				 Добавлено: Пн Дек 18, 2006 5:35 am    Заголовок сообщения:  | 
				     | 
			 
			
				
  | 
			 
			
				| А почему бы ром не расширить? | 
			 
		  | 
	 
	
		| Вернуться к началу | 
		 | 
	 
	
		  | 
	 
	
		АнС RRC2008
  
  
  Зарегистрирован: 08.11.2003 Сообщения: 2818
 
  | 
		
			
				 Добавлено: Пн Дек 18, 2006 10:58 am    Заголовок сообщения:  | 
				     | 
			 
			
				
  | 
			 
			
				 	  | Shiru писал(а): | 	 		  | Запускаем игру, по всякому гоняем, выходим, смотрим, где остались нули. | 	  
 
 
Ключевая проблема в том, что "по-всякому" не означает, что мы охватили все возможные варианты развития событий.
 
 
 
 	  | Otter писал(а): | 	 		  | Хе-хе, не *собираюсь*. У меня уже готов набор навороченных уровней и программа подшивки их в игру. Осталось только асм доделать (и позвонить одному бывшему однокласснику, которому принадлежат права на несколько уровней) и можно будет выкладывать. | 	  
 
 
О, круто! Если уровни не только сверхсложные, нно и интересные, это будет стоящий хак. Ждёмс.   | 
			 
		  | 
	 
	
		| Вернуться к началу | 
		 | 
	 
	
		  | 
	 
	
		Shiru
 
 
  Зарегистрирован: 25.10.2006 Сообщения: 295 Откуда: Russia, Moscow
  | 
		
			
				 Добавлено: Пн Дек 18, 2006 11:20 am    Заголовок сообщения:  | 
				     | 
			 
			
				
  | 
			 
			
				 	  | АнС писал(а): | 	 		  | Ключевая проблема в том, что "по-всякому" не означает, что мы охватили все возможные варианты развития событий. | 	  
 
Безусловно, но по крайней мере, это способ быстро локализовать участки памяти для анализа, не вникая в работу/компоновку всей программы в целом. | 
			 
		  | 
	 
	
		| Вернуться к началу | 
		 | 
	 
	
		  | 
	 
	
		Otter
 
  
  Зарегистрирован: 12.12.2006 Сообщения: 121 Откуда: Москва
  | 
		
			
				 Добавлено: Пн Дек 18, 2006 7:49 pm    Заголовок сообщения:  | 
				     | 
			 
			
				
  | 
			 
			
				Ух-ты ткнулся (ища пустое место) и попал на МУЗЫКУ! В моей версии кое-какая музыка использоваться не будет, поэтому можно записать фильтр поверх неё. Но это токо 64 байта  ! Надо ещё минимум 7.
 
(Это ж надо тупызм вурдалаки!! - записали музыку bonus-а и титульного экрана в одно место     - команды типа через одну играются....)
 
 
Насчёт метода, предложенного Shiru-ом, попытаюсь...., конечно для меня редактировать исходник имитатора приставки - зверские дебри, но может что и выйдет. К слову, а вот отладчик FCEU-а даже если говорит, что обращения к памяти не было (контрольная точка не срабатывает), на самом деле оно могло и быть - при инициации наверно. В частности палитра в самом начале файла. _________________ на этом я кончаю свой рассказ, и кошку задавил КамАЗ
  Последний раз редактировалось: Otter (Пн Апр 23, 2007 10:10 pm), всего редактировалось 2 раз(а) | 
			 
		  | 
	 
	
		| Вернуться к началу | 
		 | 
	 
	
		  | 
	 
	
		АнС RRC2008
  
  
  Зарегистрирован: 08.11.2003 Сообщения: 2818
 
  | 
		
			
				 Добавлено: Пн Дек 18, 2006 9:04 pm    Заголовок сообщения:  | 
				     | 
			 
			
				
  | 
			 
			
				 	  | Otter писал(а): | 	 		  | К слову, а вот отладчик FCEU даже если говорит, что обращения к памяти не было (останов не срабатывает), на самом деле оно могло и быть - при инициации наверно. В частности палитра в самом начале файла. | 	  
 
 
Это глюки бряков на ProgrammCounter. Ты просто ставь для нужного диапазона две галочки - на R и на P, тогда не будет пропускать. | 
			 
		  | 
	 
	
		| Вернуться к началу | 
		 | 
	 
	
		  | 
	 
	
		evgeny RRC2008
  
 
  Зарегистрирован: 08.02.2006 Сообщения: 188
 
  | 
		
			
				 Добавлено: Вт Дек 19, 2006 7:16 am    Заголовок сообщения:  | 
				     | 
			 
			
				
  | 
			 
			
				| Так я и не понял, почему не расширить ром? Игра 24 кб весит, радиуса действия поинтеров должно до 64 кб хватить. Что мешает загнать код в конец рома? | 
			 
		  | 
	 
	
		| Вернуться к началу | 
		 | 
	 
	
		  | 
	 
	
		Otter
 
  
  Зарегистрирован: 12.12.2006 Сообщения: 121 Откуда: Москва
  | 
		
			
				 Добавлено: Чт Дек 21, 2006 12:43 pm    Заголовок сообщения:  | 
				     | 
			 
			
				
  | 
			 
			
				Слушай, а я как-то не допирал до этого.   Что, всё будет корректно отображаться при загрузке в память, даже если размер файла будет неровный? А почему тогда все официальные игры делались чётко размером 16, 32, 64, 128 и т. п. КБ?
 
 
-------------
 
 
Так или иначе, кое-какое свободное место я нашёл и разместил фильтр, и музыка вроде правильно включается. Только вот ещё малый вопрос, у кого глаз набит, позырьте: $C5C6 - последние строки перед выходом из паузы. JSR $F08D - некая инициация включения музыки (если не сделать, музыка после включения будет играть обрывки); $C5D9: LDA #$01; STA $3C - это и есть включение.
 
Но вот между ними какие-то 2-е проверки. Максимум, что я понял, что $E5 принимает 1 иногда в демонстрационном режиме. Зачем они нужны? Можно ли включать музыку без них? _________________ на этом я кончаю свой рассказ, и кошку задавил КамАЗ
  Последний раз редактировалось: Otter (Чт Дек 21, 2006 1:24 pm), всего редактировалось 2 раз(а) | 
			 
		  | 
	 
	
		| Вернуться к началу | 
		 | 
	 
	
		  | 
	 
	
		Shiru
 
 
  Зарегистрирован: 25.10.2006 Сообщения: 295 Откуда: Russia, Moscow
  | 
		
			
				 Добавлено: Чт Дек 21, 2006 1:06 pm    Заголовок сообщения:  | 
				     | 
			 
			
				
  | 
			 
			
				 	  | Otter писал(а): | 	 		  | Слушай, а я как-то не допирал до этого. :o Что, всё будет корректно отображаться при загрузке в память, даже если размер файла будет неровный? А почему тогда все официальные игры делались чётко размером 16, 32, 64, 128 и т. п. КБ? | 	  
 
Потому-что такой объём (кратный степени двойки) имеют микросхемы ПЗУ, и вообще микросхемы памяти - это следует из их устройства. 24 КБ - это, видимо, несколько корпусов: 16+8, или 8+8+8. Тебе придётся расширять до 32 КБ. | 
			 
		  | 
	 
	
		| Вернуться к началу | 
		 | 
	 
	
		  | 
	 
	
		Otter
 
  
  Зарегистрирован: 12.12.2006 Сообщения: 121 Откуда: Москва
  | 
		
			
				 Добавлено: Чт Дек 21, 2006 1:21 pm    Заголовок сообщения:  | 
				     | 
			 
			
				
  | 
			 
			
				Не ну понятно, что схемы имеют такой размер, но если сделать ПАТЧ (память токо для чтения - лучше не называть их ромами) некратного размера, остаток будет 0-евыми байтами инициирован, или всё зависнет?
 
 
------
 
 
Да и кстати говоря, в этой игре всё равно отображение кода из файла ($0010 - $400F) в память идёт $8000 - $BFFF и $C000 - $FFFF (копия) и исполняется второй экземпляр. Поэтому чтобы расширить ПАТЧ, мало того что пришлось бы все абсолютные указатели в нём менять, так ещё и где-то менять инструкции, чтобы исполнялась первая копия, т. к. только её хвост уместился бы в 64 КБ памяти.
 
 
Так всё-таки, посмотрите кто-нито вторую часть предыдущего вопроса  . _________________ на этом я кончаю свой рассказ, и кошку задавил КамАЗ | 
			 
		  | 
	 
	
		| Вернуться к началу | 
		 | 
	 
	
		  | 
	 
	
		-=#Griever#=- Гость
 
 
 
 
 
  | 
		
			
				 Добавлено: Чт Дек 21, 2006 7:24 pm    Заголовок сообщения:  | 
				     | 
			 
			
				
  | 
			 
			
				otter
 
   Личку проверь...   | 
			 
		  | 
	 
	
		| Вернуться к началу | 
		 | 
	 
	
		  | 
	 
	
		 | 
	 
 
  
	 
	    
	   | 
	
Вы не можете начинать темы Вы можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах
  | 
   
 
  
Powered by phpBB © 2001, 2005 phpBB Group
  
		 |