Список форумов shedevr.org.ru shedevr.org.ru
Группа перевода приставочных игр "ШЕДЕВР"
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 

Помогите новичку
На страницу Пред.  1, 2, 3, 4, 5, 6, 7, 8  След.
 
Начать новую тему   Ответить на тему    Список форумов shedevr.org.ru -> Базовый ромхакинг
Предыдущая тема :: Следующая тема  
Автор Сообщение
Guyver
RRC2008
RRC2008


Зарегистрирован: 12.05.2005
Сообщения: 302
Откуда: СИНЕГОРЬЕ

СообщениеДобавлено: Чт Фев 05, 2009 8:48 am    Заголовок сообщения: Ответить с цитатой

Странно... Я в своё время перевёл примерно 60% этой игры - подобных проблем не возникало... Не было в роме проверки контрольной суммы...

Но так как перевод на денди уже выпустили - я так и не доделал перевод...
_________________
Я не волшебник - я только учусь...

Мой сайт: GUYVERperevod
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора MSN Messenger
bitchboy



Зарегистрирован: 24.01.2009
Сообщения: 11

СообщениеДобавлено: Чт Фев 05, 2009 9:15 pm    Заголовок сообщения: Ответить с цитатой

а как и где можно узнать, что уже переведено на русский а что нет...

и поосоветуйте плиз прогу для извлечения запакованой графики для сегиМД и СНЕСа..
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Марат



Зарегистрирован: 08.01.2008
Сообщения: 211
Откуда: Казахстан, Астана

СообщениеДобавлено: Чт Фев 05, 2009 10:28 pm    Заголовок сообщения: Ответить с цитатой

bitchboy писал(а):

и поосоветуйте плиз прогу для извлечения запакованой графики для сегиМД и СНЕСа..

Нет такой программы. Для каждой игры нужно писать отдельную программу, для извлечения и обратной вставки графики. Бывают, конечно, ислючения, если это игры одной серии или одного разработчика, да и то не всегда.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Mefistotel
RRC2008
RRC2008


Зарегистрирован: 08.03.2008
Сообщения: 294
Откуда: МАГАДАН

СообщениеДобавлено: Пт Фев 06, 2009 2:26 pm    Заголовок сообщения: Ответить с цитатой

Цитата:
а как и где можно узнать, что уже переведено на русский а что нет...

Вот здесь посмотри.... http://bhlady.narod.ru/references.htm#list
На примере Кристалиса на колор вроде рассмотрена работа Круптара 6 в соответсвующей доке.
_________________
Перевод приставочных игр
База переводов
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
Shinigami
Неграмотный


Зарегистрирован: 25.09.2008
Сообщения: 87
Откуда: Екатеринбург

СообщениеДобавлено: Пт Фев 06, 2009 3:38 pm    Заголовок сообщения: Ответить с цитатой

Точнее, лучше здесь http://bhlady.narod.ru/list.htm
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
IfoR



Зарегистрирован: 16.05.2006
Сообщения: 334

СообщениеДобавлено: Пт Мар 27, 2009 12:17 am    Заголовок сообщения: Ответить с цитатой

Люди! Я вот на каникулах решил разобрать архитектуру и вот у меня накопилась кучка вопросов с которыми я толком неразобрался.
Где собственно хранится этот самый системный стек (и пользовательский и супервизорский)? Из программ мануала я это так и не понял, в другой документации говорится, что по адрессам FF00-FFFF ОЗУ, в эмуляторе разных играх A7 указывает на разные участки ОЗУ. Месторасположение выберается произвольно чтоль?
Регистры A7 и A7' - это отдельные регистры (независимые)?
Как праильно обозначается адресс начала ОЗУ(например) в 32 битном виде 00FF0000 или FFFF0000?
Что за параметр Cycles в дебагере Gens-а?

Вот. )

P.S. M68000


Последний раз редактировалось: IfoR (Сб Мар 28, 2009 6:57 pm), всего редактировалось 1 раз
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
silenthill



Зарегистрирован: 26.03.2009
Сообщения: 1

СообщениеДобавлено: Пт Мар 27, 2009 11:24 am    Заголовок сообщения: Ответить с цитатой

Народ я вот хочу заняться переводом игры GTA CW на Нинтендо DS . Но вот с чего начать незнаю. Помогите разобраться как и чем вытащить\найти там тексты и т.п.
Есть образ игры для эмуля...
Очень прошу помочь. Для меня лично считаю это того стоит.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Густь
Гость





СообщениеДобавлено: Пт Мар 27, 2009 6:32 pm    Заголовок сообщения: Ответить с цитатой

Я думаю, тебе будет достаточно знать, что самостоятельно ты её не переведёшь. Rolling Eyes А дальнейшее и так понятно.
Вернуться к началу
IfoR



Зарегистрирован: 16.05.2006
Сообщения: 334

СообщениеДобавлено: Пт Мар 27, 2009 9:54 pm    Заголовок сообщения: Ответить с цитатой

Ах, ну да... Со стеком тупанул. Там же на 0 векторе адресс стоит. Smile Вобщем, так понимаю его можно распологать в любом месте ОЗУ.
На счёт правильности указания я так понял, что правильно 00FF0000. Однако, в некоторых играх адрес ставится именно FFFF0000. Так понял, что впринципе это одно и тоже...
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
lupus



Зарегистрирован: 09.08.2006
Сообщения: 485
Откуда: Украина, Крым

СообщениеДобавлено: Пт Мар 27, 2009 10:42 pm    Заголовок сообщения: Ответить с цитатой

silenthill писал(а):
Народ я вот хочу заняться переводом игры GTA CW на Нинтендо DS . Но вот с чего начать незнаю. Помогите разобраться как и чем вытащить\найти там тексты и т.п.
Есть образ игры для эмуля...
Очень прошу помочь. Для меня лично считаю это того стоит.

начни с чего-то попроще.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Марат



Зарегистрирован: 08.01.2008
Сообщения: 211
Откуда: Казахстан, Астана

СообщениеДобавлено: Сб Мар 28, 2009 12:12 am    Заголовок сообщения: Ответить с цитатой

IfOrAnD писал(а):

На счёт правильности указания я так понял, что правильно 00FF0000. Однако, в некоторых играх адрес ставится именно FFFF0000. Так понял, что впринципе это одно и тоже...

Одно и то же, просто, по-моему, при установке адреса озу в команде содержатся только 4 младших байта адреса, а старшие автоматически устанавливаются FFFF.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Гость






СообщениеДобавлено: Сб Мар 28, 2009 12:53 am    Заголовок сообщения: Ответить с цитатой

2 IfOrAnD:
Если я правильно понял, речь о процессоре M68K, Sega Genesis..
Там старший байт в адресах игнорируется (т.к. адресное пространство 24-битное: 000000..FFFFFF).. Адрес задается младшими 3 байтами..
Поэтому, для Сеги 00FF0000 и FFFF0000 - это один и тот же адрес (FF0000).. Для адресов FF8000..FFFFFF полезно устанавливать старший байт = FF, для адресов 000000..007FFF полезно устанавливать старший байт = 00 (это позволяет в машинном коде хранить адреса в "короткой" 16-битной форме)..
Вернуться к началу
IfoR



Зарегистрирован: 16.05.2006
Сообщения: 334

СообщениеДобавлено: Сб Мар 28, 2009 6:49 pm    Заголовок сообщения: Ответить с цитатой

Ясно, спасибо. Так понял, что для указания памяти\портов 4 байт вобщем-то не важен. Smile
Осталось разобраться с Пользовательским, Супервизовским, Прерываний стеками и регистрами-указателями А7, А7', А7", а собственно как это всё организовывается, а тоесть как распологаются в памяти эти стеки и разные ли эти регистры. И что это за Cycles. Smile
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
GrayLightTaliz



Зарегистрирован: 13.10.2005
Сообщения: 204
Откуда: Краснодар/Королёв

СообщениеДобавлено: Вс Мар 29, 2009 1:41 am    Заголовок сообщения: Ответить с цитатой

2 IfOrAnD:

Внимание! В этом сообщении есть мои ошибочные мысли! Smile Исправления см в последующих сообщениях!

Почитав доки, пришел к такому выводу (все нижесказанное относится только к процессору 68000, в других моделях может быть по другому.. возможно, ты изучаешь общую документацию по 680XX, и потому рассматриваешь возможности, не реализованные в 68000):

(сразу замечу, что не уверен на все сто, что все именно так.. если кто-то может поправить - пишите Smile )

Все инструкции при использовании стека (например, JSR) используют A7 как указатель на вершину стека. Вместо A7 еще пишут SP. (A7 и SP - одно и то же)

При этом у процессора в наличии 2 стековых регистра: USP и SSP.
A7(или SP) представляет собой один из них (в зависимости от текущего режима User/Supervisor). Т.е. A7 действует как "ярлык" и ссылается либо на USP, либо на SSP.. Таким образом все инструкции автоматически используют либо USP, либо SSP

Текущий режим отражается состоянием 5-го бита в старшем байте регистра SR (0=user, 1=supervisor)
Заметив, что при сбросе эмулятор Gens устанавливает SR = $2700, я пришел к выводу, что все программы на Сеге запускаются в режиме Supervisor (это подтверждается также и тем, что в коде используются инструкции типа MOVE xxx, SR)..

Значит, сразу после запуска A7 ссылается на SSP..
Также при запуске в SSP записывается адрес, хранящийся в первых 4-х байтах рома..
После чего программа может переопределить адрес стека, записав нужное значение в A7

В итоге:
У процессора есть 2 отдельных стековых регистра:
1. USP (User Stack Pointer)
2. SSP (System Stack Pointer) (в общей документации его также обозначают ISP)..
Регистра A7, получается, вообще нет.. При работе с ним на самом деле используется один из стековых регистров, в зависимости от режима..

В режиме Supervisor: A7 = SP = SSP; USP можно менять, используя специальную инструкцию;
В режиме User: A7 = SP = USP; SSP недоступен.

Программа начинается в режиме Supervisor.
При прерываниях или исключительных ситуациях (TRAP, ILLEGAL и т.п.) программа автоматически переходит в режим supervisor, а после обработки возвращается в тот режим, который был до этого..

---

Организован системный стек так, что растет в сторону уменьшения адресов.. По идее, если используются оба стека, то они должны располагаться по разным адресам, иначе работа одного может нарушить данные в другом..

---

Cycles - это количество циклов процессора.. на выполнение каждой инструкции уходит некоторое кол-во циклов.. в дебаггере Gens эта величина показывает сколько циклов прошло от прошлого шага отладки до текущего.. например, если нажимать "T", то Cycles покажет сколько циклов ушло на выполнение последней инструкции..


Последний раз редактировалось: GrayLightTaliz (Пн Мар 30, 2009 1:08 am), всего редактировалось 1 раз
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
IfoR



Зарегистрирован: 16.05.2006
Сообщения: 334

СообщениеДобавлено: Вс Мар 29, 2009 8:47 pm    Заголовок сообщения: Ответить с цитатой

GrayLight писал(а):
При этом у процессора в наличии 2 стековых регистра: USP и SSP.
A7(или SP) представляет собой один из них (в зависимости от текущего режима User/Supervisor). Т.е. A7 действует как "ярлык" и ссылается либо на USP, либо на SSP.. Таким образом все инструкции автоматически используют либо USP, либо SSP

...

Значит, сразу после запуска A7 ссылается на SSP..
Также при запуске в SSP записывается адрес, хранящийся в первых 4-х байтах рома..
После чего программа может переопределить адрес стека, записав нужное значение в A7

В итоге:
У процессора есть 2 отдельных стековых регистра:
1. USP (User Stack Pointer)
2. SSP (System Stack Pointer) (в общей документации его также обозначают ISP)..
Регистра A7, получается, вообще нет.. При работе с ним на самом деле используется один из стековых регистров, в зависимости от режима..


Так, я немного не понял. А7 при изменении регистра сам меняется на где-то сохранёные значения указателей вершин стеков или нужны программые действия? Как я понял, сам меняется. (Наконец-то выговорил внятно свой вопрос Smile )

GrayLight писал(а):
2. SSP (System Stack Pointer) (в общей документации его также обозначают ISP)..

ISP - это Указатель на вершину стека прерывания. Является 1 из 2 подразделов Системного стека в который входит ещё и SSP - Указатель на вершину стека Супервизора. Режим ISP или SSP определяет 12 бит (по разрядности) Статус регистра. (Когда 13 выберает Пользовательский стек или Системный стек) Итого получается 3 указателя стека. В кучке процессоров в которую входит и M68000 такая система, вроде как, реализована, а вроде как и нет. В программ мануале написано, что потдерживается, а в даташите нет про это и слова.... Это я собственно тоже не понял. :)

GrayLight писал(а):
Регистра A7, получается, вообще нет.. При работе с ним на самом деле используется один из стековых регистров, в зависимости от режима..

По моему формулероовка немного неверна. Smile
USP, SSP - Это, вроде как, обозначения, куда A7 указывает. USP, SSP регистрами не являются. :)

GrayLight писал(а):
Организован системный стек так, что растет в сторону уменьшения адресов.. По идее, если используются оба стека, то они должны располагаться по разным адресам, иначе работа одного может нарушить данные в другом..

Ну, вроде как, стеки всегда растут снизу вверх. По этому указатели и называются вершинами. :)

GrayLight писал(а):
Cycles - это количество циклов процессора.. на выполнение каждой инструкции уходит некоторое кол-во циклов.. в дебаггере Gens эта величина показывает сколько циклов прошло от прошлого шага отладки до текущего.. например, если нажимать "T", то Cycles покажет сколько циклов ушло на выполнение последней инструкции..

То есть это просто количество тактов? Ясно. Smile
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Марат



Зарегистрирован: 08.01.2008
Сообщения: 211
Откуда: Казахстан, Астана

СообщениеДобавлено: Пн Мар 30, 2009 12:12 am    Заголовок сообщения: Ответить с цитатой

GrayLight писал(а):

Регистра A7, получается, вообще нет.. При работе с ним на самом деле используется один из стековых регистров, в зависимости от режима..


Как это нет? Его не может не быть. Это же адресный регистр, он для того и нужен, чтобы указывать на какую-то область памяти.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
GrayLightTaliz



Зарегистрирован: 13.10.2005
Сообщения: 204
Откуда: Краснодар/Королёв

СообщениеДобавлено: Пн Мар 30, 2009 12:55 am    Заголовок сообщения: Ответить с цитатой

2 IfOrAnD:

Да, пожалуй, я не так все представил.. см ниже )

---

Касаемо ISP
Как я понял, начиная с 68020 у процессоров вместо одного SSP регистра появляются два: ISP и MSP (именно их переключает бит-12). Но у 68000 нет MSP (и бит-12 не используется).. И, как я понял, есть только SSP (который играет также роль ISP, если сравнивать с поздними моделями)..

---

Насчет формулировки (ты правильнее выразил), похоже, наиболее близкая к истине будет такая:
"реально" существуют в процессоре два регистра: A7 и A7' (второй никак не доступен в режиме user)

в режиме user: A7 хранит USP (в это время в A7' хранится SSP, но обратиться к регистру в этом режиме невозможно)
при переключении режима, регистры меняются значениями.
в режиме supervisor: A7 хранит SSP (в это время A7' хранит USP и этот регистр доступен под именем USP, т.е. инструкции типа MOVE xxx, USP это на самом деле MOVE xxx, a7' )

SP - альтернативное обозначение для A7

все инструкции, использующие стек, работают с регистром A7 (таким образом, используя тот или иной стек, в зависимости от текущего режима)

фух..

вот еще выдержка из исходника Gens'а (точнее исходника использующегося в нем эмулятора 68k):

Код:
      ** First of all, the 68000/68010 stack pointer behavior has
      ** not changed:
      **
      ** 1. In supervisor mode, __a7 contains the supervisor stack
      **    pointer and __asp contains the user stack pointer.
      ** 2. In user mode, __a7 contains the user stack pointer and
      **    __asp contains the supervisor stack pointer.


---

Относительно адресации в памяти, стеки могут расти в либо в сторону увеличения адресов, либо в сторону уменьшения.. если ты реализуешь собственный стек в памяти, то выбор направления за тобой.. Но системный стек, которым пользуется процессор, растет именно в сторону уменьшения адресов.. например, инструкция JSR, сохраняя адрес для возврата в стеке, уменьшит адрес в указателе стека на 4 байта, таким образом адрес вершины стека уменьшится на 4..

---

2 Марат:

Я ошибся Embarassed .. неправильно все представил.. A7 - есть! Он жив и будет жить! Smile
Но смысл, содержащегося в нем адреса, меняется (как и сам адрес) при переходе из одного режима в другой.. вот )


Последний раз редактировалось: GrayLightTaliz (Пн Мар 30, 2009 1:24 pm), всего редактировалось 1 раз
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
Гость






СообщениеДобавлено: Пн Мар 30, 2009 4:30 am    Заголовок сообщения: Ответить с цитатой

lps писал(а):
silenthill писал(а):
Народ я вот хочу заняться переводом игры GTA CW на Нинтендо DS . Но вот с чего начать незнаю. Помогите разобраться как и чем вытащить\найти там тексты и т.п.
Есть образ игры для эмуля...
Очень прошу помочь. Для меня лично считаю это того стоит.

начни с чего-то попроще.


А мне не надо попроще. Мне нужна именно ЭТА игра. Что никто незнает как и что?
Вернуться к началу
IfoR



Зарегистрирован: 16.05.2006
Сообщения: 334

СообщениеДобавлено: Пн Мар 30, 2009 10:27 pm    Заголовок сообщения: Ответить с цитатой

2GrayLight, спасибо за разъяснение. Very Happy

GrayLight писал(а):

Относительно адресации в памяти, стеки могут расти в либо в сторону увеличения адресов, либо в сторону уменьшения.. если ты реализуешь собственный стек в памяти, то выбор направления за тобой.. Но системный стек, которым пользуется процессор, растет именно в сторону уменьшения адресов.. например, инструкция JSR, сохраняя адрес для возврата в стеке, уменьшит адрес в указателе стека на 4 байта, таким образом адрес вершины стека уменьшится на 4..


Так я это и не отрицал. Я и говорю, что стеки обычно растут снизу вверх (в сторону уменьшения адрессов, по твоему Smile ). Каждая ячейка занимает ровно 4 байта.
Ну а в программной реализации его можно хоть по диагонали реализовывать. Laughing
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Ti-Jey



Зарегистрирован: 06.01.2009
Сообщения: 21

СообщениеДобавлено: Пн Июн 08, 2009 5:35 pm    Заголовок сообщения: Ответить с цитатой

У меня такая проблема начал переводить Final Fantasy Legend на GB Color при поиске шрифта нашёл его но возникла проблема с таблицей там в одом тайле сразу две буквы.

Помогите с составлением таблицы.

P.S.: Заранее спасибо.
P.P.S.: Буду рад если сразу готовую напишите.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Ti-Jey



Зарегистрирован: 06.01.2009
Сообщения: 21

СообщениеДобавлено: Пн Июн 08, 2009 5:37 pm    Заголовок сообщения: Ответить с цитатой

Кстати вот скрин:
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
HoRRoR
RRC2008
RRC2008


Зарегистрирован: 21.06.2006
Сообщения: 2341
Откуда: Ростов-на-Дону

СообщениеДобавлено: Пн Июн 08, 2009 5:38 pm    Заголовок сообщения: Ответить с цитатой

Цветность не та выбрана, попробуй 1bpp.
_________________
Работаю за деньги
KILL ALL HUMANS!!!!!111
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
Ghost



Зарегистрирован: 24.04.2004
Сообщения: 237

СообщениеДобавлено: Сб Июн 13, 2009 3:23 pm    Заголовок сообщения: Ответить с цитатой

С A7 и SR есть некая путаница. Я специально проверял статусы на железе и вот что выяснил:
биты SR:
T1 0 S 0 0 I I I 0 0 0 X N Z V C
Битов T0 и M нет. Соответственно, нет режимов Trace on change of flow и Trace: Undefined. И нет регистра MSP, есть только SSP и USP.
Если T1 = 1, ПОСЛЕ каждой инструкции происходит прерывание на 9-й вектор. PC указывает на следующую инструкцию. Внутри прерывания в SR сбрасывается флаг T1, при выходе из прерывания восстанавливается значение SR из стека (а оно было с установленным флагом SR).

Привилегированные инструкции
RTE
Все writes to SR
RESET
STOP

Непонятно:
MOVE to USP
MOVE from USP
"Непонятно" потому, что иногда в User Mode прерывание Privileged срабатывало, иногда нет, я сам толком ничего не понял. Но в мануале написано, что эти инструкции привилегированные.

MOVE from SR НЕ является привилегированной для MC68HC000 (который в сеге стоит), а для MC68EC000 является. Тесты это подтвердили.

ЕМНИП, прерывание "Illegal" не даёт супервизорского режима.
Ещё написано "The MC68000 and MC68008 cannot write the vector offset and format code to the system stack", но в некоторых случаях данные заносятся в стек, в некоторых - нет.
При переходе в User Mode выполнение привилегированных инструкций приводит к срабатыванию прерывания, затем выходу из него (PC, занесенный в стек, указывает на следующую инструкцию, т.е. привилегированная инструкция вызывает прерывание и пропускается). Что с USP - непонятно. Но главное в том, что при переходе в User Mode, емнип, A7 и USP не менялись местами.
Вот такая вот ерунда. Я, правда, делал немного тестов.
Дальше думаю написать небольшой дебуггер ДЛЯ сеги с выводом инфы на экран, чтоб понятней было.
_________________
Мысль - это интеллектуальный эксцесс данного индивидуума.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Ghost



Зарегистрирован: 24.04.2004
Сообщения: 237

СообщениеДобавлено: Сб Июн 13, 2009 11:52 pm    Заголовок сообщения: Ответить с цитатой

upd: в общем, я провёл тесты. Вот мои записи:

При запуске приставки значения:
SR = 2700
USP = 77FFDFFF

MOVE USP обе являются привилегированными. USP и A7 никак не связаны. Если в привилегированном режиме (он по умолчанию) записать в A7 значение X, а в USP - Y, то при переходе в User Mode и обратно A7 остаётся равен X, а из USP считать Y нельзя, т.к. инструкция привилегированная. Если насильно перейти в прив. режим, значения A7 и USP остаются прежними.
В обоих режимах стек поинтер - A7, это видно по его изменениям при вызовах подпрограмм и прерываний.

Теперь про другие прерывания.
При вызове подпрограммы в стек заносится PC следующей команды, прерывания - PC, затем старый SR, т.е.
(A7) указывает на значение SR,
2(A7) - на PC.
Все проверенные прерывания сбрасывали флаг T1=0 и ставили флаг S=1 (supervisor).

Если флаг T1=1, то включается режим трассировки. Trace срабатывает ПОСЛЕ КАЖДОЙ правильной инструкции, в т.ч. bra $fe (каждый раз после её исполнения). Со STOP я не разобрался, но факт то, что шедшие за ней команды выполнялись. "ПОСЛЕ" значит, что инструкция выполнит все действия (в т.ч. запись в стек, если она это делает, в т.ч. изменение регистра SR, если она вызывает прерывание (подробнее см. пример с CHK)), вычислится адрес следующей инструкции, и только затем в стек заносятся PC (адрес следующей инструкции) и SR (если команда его меняет, то занесётся изменённый SR) и выполняется обработчик Trace. Т.к. после входа в прерывание T1=0 (см. выше), команды в обработчике Trace будут идти как обычно.

Пример Trace и CHK.
Код:
_0000033E: 46FC 8515                MOVE.W    #$8515,SR
_00000342: 41BC 0005                CHK.W     #$0005,D0
_00000346: 7011                     MOVEQ     #$11,D0
_00000348: 41BC 0005                CHK.W     #$0005,D0
_0000034C: 4E71                     NOP       

_00000548: 4E73                     RTE       ; предыдущее прерывание
* Здесь начинается CHK
_0000054A: 40C0                     MOVE      SR,D0
_0000054C: 2CFC 2D2D2D2D            MOVE.L    #$2D2D2D2D,(A6)+
_00000552: 2CFC 43484B20            MOVE.L    #$43484B20,(A6)+;  "CHK "


Если CHK не сработал, всё идет как обычно. Если сработал, то CHK заносит в стек PC следующей команды и старый SR (например, 8510), а новый становится с S=1, T1=0 (т.е. 2510), только ЗАТЕМ срабатывает Trace, занося в стек PC прерывания CHK и уже новый SR (2510), а в самом прерывании он не изменится и будет 2510. Таким образом, A7 сдвигается на 12 байт назад, и в стеке будет
2510 0000 054A 8510 0000 034C


Вектор Illegal вызывает любая неверная команда и команда ILLEGAL.

Команды прерываний:
Illegal, Line10, Line15, Privileged пишут в стек PC неверной инструкции, таким образом, RTE возвращается к ней. Т.к. неверная инструкция фактически не выполняется, после неё не срабатывает Trace. Чтобы выйти из Privileged, можно в стеке исправить значение SR, и выполнение RTE занесёт в SR это значение, т.о., при выходе из прерывания Privileged мы окажемся в прив. режиме.
CHK, Div0, TRAP, TRAPV пишут в стек PC инструкции, следующей за той, что вызвала прерывание. Сразу после прервашей инструкции срабатывает Trace, занося в стек PC той команды, которая должна выполниться после входа в прерывание, т.е. PC точки входа в прерывание (см. выше про полное выполнение инструкции перед срабатыванием Trace).

Addr заносит в стек 14 байт (см. ниже), слева направо:
w - искажённый опкод команды, вызвавшей прерывание
l - вычисленный полный нечётный адрес, из-за которого сработало прерывание
w - опкод команды, вызвавшей прерывание
w - старый SR
l - PC того места, где прервалось чтение команды. Например, в
move.l odd,address
заносится PC операнда address, а в
move.l even,odd
заносится почему-то PC середины операнда odd, а не его конца (см. ниже).
Т.к. команда с нечётным адресом не выполняется, Trace не срабатывает. В случае с командами Bcc, RTS и т.д., они также не выполняются и будут просто пропущены.

С ошибкой по нечётному адресу я не разобрался до конца с неким байтом, который заносится в стек. Ниже поясняется, каким именно.
Примеры с Address_Error:
Код:
_00000364: 3038 0001                MOVE.W    ROM:$0001,D0
При срабатывании Address_Error A7 = FFEFF2 (взято 14 байт из стека), содержимое стека:
?    add_long  w1   SR   PC
3031 0000 0001 3038 861F 0000 0368
w1 - 1-е слово инструкции (опкод)
add_long - полный нечётный адрес, вычисленный по инструкции
PC указывает на следующую команду

? - непонятно, что за значение. Старший байт всегда совпадает со старшим байтом опкода w1


Соответствия неверных команд и стека:

Код:
_00000364: 3038 0001                MOVE.W    ROM:$0001,D0
3031 00000001 3038

_0000036A: 2038 0001                MOVE.L    ROM:$0001,D0
2031 00000001 2038
_0000036E: 2CC0                     MOVE.L    D0,(A6)+
d0 содержал значение SR = 261F, т.е. инструкция move.l $1,d0 не выполнилась

_00000372: 2A39 01234567            MOVE.L    ROM:$01234567,D5
2A31 01234567 2A39

_0000037A: 23C2 01234567            MOVE.L    D2,ROM:$01234567
23C1 01234567 23C2

_00000382: 6001                     BRA       ROM:$00000385(pc)
6012 00000385 6001

_00000386: 6000 0001                BRA       ROM:$00000389(pc)
6012 00000389 6000

_0000038C: 4EF9 FE986725            JMP       UNK:$FE986725
4EF2 FE986725 4EF9
Следующий PC был 38E почему-то

_00000394: 23F9 01234567 00FF9000   MOVE.L    ROM:$01234567,RAM:$00FF9000
23F1 01234567 23F9
Следующий PC = 39A, т.е. не считан второй dword

_000003A0: 23F9 01234568 00FF9001   MOVE.L    ROM:$01234568,RAM:$00FF9001
23E1 00FF9001 23F9
Следующий PC = 3A8, т.е. не считан последний word

_000003AC: 23F9 01234567 00FF9001   MOVE.L    ROM:$01234567,RAM:$00FF9001
23F1 01234567 23F9
Следующий PC = 3B2, т.е. не считан второй dword


upd2:
да, ещё.... Сделать нечётный адрес без команды можно, если вписать его в 1-м векторе (PC init). Но что будет дальше, я не представляю.
Регистр PC 32-хбитный.
_________________
Мысль - это интеллектуальный эксцесс данного индивидуума.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
GothenX



Зарегистрирован: 09.08.2009
Сообщения: 19

СообщениеДобавлено: Пт Сен 04, 2009 6:45 am    Заголовок сообщения: Ответить с цитатой

В общем решил начать с малого и первым моим шагом стал поиск в игре шрифта. Использовал мануал. Игра - F1 World Championship Edition на SMD. Взял, что попроще для начала. С помощью Tile Molester полистал ром... шрифт вроде нашёл, но даже в лучшем из форматов (4bpp linear) он выглядит вот так:



Подскажите, пожалуйста, в чём может быть проблема и как её решить?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Показать сообщения:   
Начать новую тему   Ответить на тему    Список форумов shedevr.org.ru -> Базовый ромхакинг Часовой пояс: GMT + 3
На страницу Пред.  1, 2, 3, 4, 5, 6, 7, 8  След.
Страница 3 из 8

 
Перейти:  
Вы не можете начинать темы
Вы можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Powered by phpBB © 2001, 2005 phpBB Group