|
shedevr.org.ru Группа перевода приставочных игр "ШЕДЕВР"
|
Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
Mefistotel RRC2008
Зарегистрирован: 08.03.2008 Сообщения: 294 Откуда: МАГАДАН
|
Добавлено: Сб Авг 09, 2008 7:03 am Заголовок сообщения: Neutopia (Pc Engine/Turbo Grafx-16) |
|
|
Всем привет! Давно я ничего не спрашивал... Честно сказать и не хотелось задавать вопросы, думал сам разобраться. Но как говорится, жизнь заставила. В общем платформа мало освоенная. Не считая одного перевода от марио софта( Джеки Чан Кунфу) - больше ничего нет.
В связи с этим и просить не у кого. Поэтому и создал тему.
С переводом сей замечательной игры существуют некоторые проблемы. Одна из них, пожалуй, самая главная, я не могу найти графические надписи: Bomb, Key, Gold, Сrystal, Compass и др.. В общем все надписи в режиме паузы и в меню... Возможно они пожаты, а may be всё просто.
Основной шрифт хранится в формате 4 BPP Planar и расположен по адресу hx0000DE00. Ребята, кто-нибудь занимался этой платформой?? На ней существует столько замечательных ролевых игр. Перевод будет... но это смерти подобно, выкладывать неоконченный продукт...
Может есть какие-нибудь утилиты для Турбо графа?? Из того, что я нашёл, мне ничего не помогло.
Ром - Neutopia (U), 385 кб.
Последний раз редактировалось: Mefistotel (Сб Окт 04, 2008 1:13 am), всего редактировалось 2 раз(а) |
|
Вернуться к началу |
|
|
Shiru
Зарегистрирован: 25.10.2006 Сообщения: 295 Откуда: Russia, Moscow
|
Добавлено: Сб Авг 09, 2008 8:29 am Заголовок сообщения: |
|
|
Я без понятия, как там на самом деле, но учитывая, что консоль имеет 64 КБ видео-ОЗУ (прямо как SMD), место на картридже стоит дорого, а данных в RPG всегда много - вероятность того, что используется сжатие, очень высокая. Тем более, что эта игра имеет размер 384 КБ, а графика на системе 4-битная. |
|
Вернуться к началу |
|
|
Mefistotel RRC2008
Зарегистрирован: 08.03.2008 Сообщения: 294 Откуда: МАГАДАН
|
Добавлено: Сб Авг 09, 2008 9:01 am Заголовок сообщения: |
|
|
Цитата: | Я без понятия, как там на самом деле, но учитывая, что консоль имеет 64 КБ видео-ОЗУ (прямо как SMD), место на картридже стоит дорого, а данных в RPG всегда много - вероятность того, что используется сжатие, очень высокая. Тем более, что эта игра имеет размер 384 КБ, а графика на системе 4-битная. |
Я просмотрел ром Tile Molister практически во всех режимах ... Ничего даже напоминающего графику не нашел. Сейчас хочу "поганить" ром, чтобы определить участок. Существует же много утилит для графики на другие платформы. Если графика сжата, то узнать бы алгоритм и место хранения.
Графики немного... Если всё совсем худо, то существует ли доки по этой платформы, касающиеся графики, да и вообще структуры ромов?
Для меня вообще непонятно, зачем рисовать отдельно 10-15 слов. Если можно просто обычным шрифтом сделать надписи. Видимо и вправду, велик процент экономии места. А здесь, если посмотреть, своеобразные надписи... буквы двухцветные и маленькие, такого же типа, как и рамка для диалогов. Где же лежит эта картинка..? Буду "рисовать".
P.S. Ребята, может где-нибудь есть подобие хака этой игры или попытки перевода иностранцами??? Для сравнения ромов...
~~~~~~~~~~~~~~~часа спустя..
Графики, по всей видимости, находится в диапазоне:hx27900-28800
Последний раз редактировалось: Mefistotel (Сб Авг 09, 2008 10:45 am), всего редактировалось 2 раз(а) |
|
Вернуться к началу |
|
|
Shiru
Зарегистрирован: 25.10.2006 Сообщения: 295 Откуда: Russia, Moscow
|
Добавлено: Сб Авг 09, 2008 9:37 am Заголовок сообщения: |
|
|
Mefistotel писал(а): | Если всё совсем худо, то существует ли доки по этой платформы, касающиеся графики, да и вообще структуры ромов? |
Есть доки на видеоконтроллер. Но вообще, эта система не очень хорошо документирована. Поэтому мало эмуляторов, переводов, любительских проектов.
Mefistotel писал(а): | Для меня вообще непонятно, зачем рисовать отдельно 10-15 слов. Если можно просто обычным шрифтом сделать надписи. |
Как можно легко заметить, буквы в этих надписях меньше 8 пикселей в ширину. А тайлы имеют фиксированный размер, обычно 8x8. Поэтому такие надписи нельзя сделать другим способом, кроме как хранить в виде графики. Причём эта графика может храниться либо в готовом виде (несколько тайлов), либо в шрифте произвольного формата с созданием нужных тайлов из него программно в видеопамяти (такой подход удобен, если нужно много разных надписей). |
|
Вернуться к началу |
|
|
Mefistotel RRC2008
Зарегистрирован: 08.03.2008 Сообщения: 294 Откуда: МАГАДАН
|
Добавлено: Сб Авг 09, 2008 11:58 am Заголовок сообщения: |
|
|
За доку спасибо. Буду изучать, но это надолго... Технический английский для меня сложноват, но попробую разобраться...
Цитата: | Как можно легко заметить, буквы в этих надписях меньше 8 пикселей в ширину. А тайлы имеют фиксированный размер, обычно 8x8. Поэтому такие надписи нельзя сделать другим способом, кроме как хранить в виде графики. Причём эта графика может храниться либо в готовом виде (несколько тайлов), либо в шрифте произвольного формата с созданием нужных тайлов из него программно в видеопамяти (такой подход удобен, если нужно много разных надписей). |
Вот теперь, я понял!
А сейчас хочу задать вопрос, наверно, он чисто ламерский, но если не спрошу, то так и буду тупить. Если я знаю, где расположена графика в хексредакторе, то возможно ли с помощью этой информации узнать, где она в тайловом редакторе?
В указанном диапазоне выше, идут цепочки байт. Кардинально меняется графика при значительном изменении практически всех байтов этого диапазона, да и следующих. Допустим такая цепочка:
28200 -- 41 A0 70 83 84 14 A4 E1 0D F6 F8 40 02 36 FC FE 70 43 B1 52 90 EC 07 20 38 01 D8 7C 87. Незначительные изменения байт в цепочке приводит лишь к затушевыванию некоторых сегментов букв. В общем для меня -- это чёрный лес... Буду читать доку о видеоконтроллере, может поможет. |
|
Вернуться к началу |
|
|
Shiru
Зарегистрирован: 25.10.2006 Сообщения: 295 Откуда: Russia, Moscow
|
Добавлено: Сб Авг 09, 2008 12:37 pm Заголовок сообщения: |
|
|
Ну, ты представляешь, как графика одного тайла хранится в виде данных?
Условный пример: одна точка тайла представлена одним байтом (256 цветов на точку), размер тайла 8x8 точек. 8*8=64 = один тайл занимает в памяти 64 байта. Изменение значения одного байта приведёт к изменению цвета одной точки. В памяти байты точек могут лежать построчно либо столбцами. Т.е. смещения точек от начала тайла будут такими:
Код: | 0 1 2 3 4 5 6 7
8 9 10 11 12 13 14 15
16 17 18 19 20 21 22 23.. |
Код: | 0 8 16 24 32 40 48 56
1 9 17 25 33 41 49 57
2 10 18 26 34 42 50 58.. |
Варианты с перестановкой точек возможны, но маловероятны и встречаются редко.
Для приставок формат тайла фиксирован и определяется устройством видеоконтроллера, т.е. данные тайла (в ROM'е, если несжатый, или в видеопамяти) хранятся одинаково во всех играх.
На 8-16-разрядных приставках обычно не используют форматы байт=точка. Более типичны форматы 2 бита=точка (2bpp, 4 цвета на точку в тайле) или 4 бита=точка (4bpp, 16 цветов). Идея организации данных такая-же, только оперировать надо с битами, а не точками. Например, при 2bpp в одном байте хранятся 4 соседних точки, при 4bpp - две соседних точки. Соответственно, кол-во байт, определяющих тайл, меньше - для тайла 8x8 при 2bpp это 8*8/4=16 байт, для 4bpp 8*8/2=32 байта.
Если ты знаешь, по какому смещению в файле находится несжатый тайл, знаешь кол-во байт, задающих тайл, и знаешь кол-во тайлов, отображаемых в одной строке тайлового редактора, ты легко можешь построить соотношение. Скажем, тайл 16-цветный (32 байта), по смещению 053253h, а тайловый редактор отображает 16 тайлов в строке. 053253h=340563d, 340563/32=~10642 (порядковый номер тайла от начала файла), 10642/16=~665 - искомый тайл будет в 665 строке. Если считать без округления, можно узнать и номер тайла в строке.
Нужно учитывать, что в видеопамяти тайлы обычно лежат с фиксированным шагом, кратным размеру тайла (аппаратное ограничение), т.е. если тайл занимает 32 байта, то его данные могут начинаться только по адресам 0, 32, 64.. Для несжатого тайла, лежащего в ROM'е, это неактуально - он может быть расположен по любому адресу (т.к. всё равно копируется в видеопамять процессором). Исключение - системы, где есть видео-ПЗУ в составе картриджа (NES), в этом случае часть ROM'а, являющаяся видео-ПЗУ, рассматривается как видеопамять. |
|
Вернуться к началу |
|
|
Mefistotel RRC2008
Зарегистрирован: 08.03.2008 Сообщения: 294 Откуда: МАГАДАН
|
Добавлено: Сб Авг 09, 2008 2:24 pm Заголовок сообщения: |
|
|
Я все записал и прочитал! И ещё много раз прочту! Такого познавательного ответа я сроду не слышал.... Но мне бы немного практики... чтобы я вживую посмотрел и понял механизм.
В моём случае размер тайла с буквой 8(высота)*4(ширина)=32 байта(256 бит). Так??
Тогда как в памяти байты точек будут лежать? Учитывая что 8 бит - две соседних точки :
Код: | 0 2 6 8 10 12 14 16
18 20 22 24 26 28 30 32 |
Или как???
Допустим, буква L в одном 32 байтном тайле. А мне надо Л. Для этого нужно изменить код вывода точек, из которых состоит букваL, таким образом, чтобы стала нужная нам... Нет пустых точек, есть точки с цветом фона... Так? Но как мне узнать, какие точки и каким цветом будет выводить тот или иной байт, и главное откуда в роме?? Их же все равно надо перерисовать... Необходимо изначально получить цельную картинку с искомыми надписями(написать программу, которая считает нужные байты), перерисовать её и вставить обратно. Или другим способом, заменив байты вывода тех или иных точек, сделав нужные нам буквы. А ещё хуже, перерисовав точки.... вручную...выяснив, к какой букве они относятся... Расскажи, пожалуйста, ещё! Очень интересно! Огромное желание понять. Извини, если я что-то не понимаю и говорю ерунду. |
|
Вернуться к началу |
|
|
Shiru
Зарегистрирован: 25.10.2006 Сообщения: 295 Откуда: Russia, Moscow
|
Добавлено: Сб Авг 09, 2008 3:16 pm Заголовок сообщения: |
|
|
Mefistotel писал(а): | В моём случае размер тайла с буквой 8(высота)*4(ширина)=32 байта(256 бит). Так?? |
На PCE/TG16, как и на большинстве приставок, тайлы имеют фиксированный размер 8x8. В пределах одного тайла может быть использовано 16 цветов, т.е. 4 бита на точку, т.е. один тайл занимает 32 байта.
Формат тайла на PCE довольно своеобразный - редкий случай перестановки точек (чередование). В одном байте две соседних точки по горизонтали. Первая строчка тайла - это байты со смещениями 0, 1, 16, 17. Вторая - 2, 3, 18, 19. Т.е. можно сказать, что один тайл состоит из двух полутайлов (4x8 точек, узкий и высокий), линейно лежащих в памяти друг за другом и с точки зрения видеоконтроллера представляющих один тайл.
Цитата: | Для этого нужно изменить код вывода точек, из которых состоит букваL |
Тайлы, уже лежащие в видеопамяти, выводит не код, а видеоконтроллер, логика работы которого жёстко определена его устройством.
В твоём случае вопрос выглядит так: откуда тайлы с изображением этих букв берутся в видеопамяти? Варианты:
- Тайлы лежат несжатыми, в точно таком виде, как и в видеопамяти, и копируются в видеопамять процессором без изменений, также как и другие тайлы (фрагменты спрайтов, фона). Если тайловый редактор показывает другие тайлы, но не показывает искомые, то это не тот случай.
- Тайлы (графика) сжаты. Т.к. данные графики - это набор байт, сжаты они могут быть любым алгоритмом, какой нравится разработчику. Тогда нужно найти код, который распаковывает эти данные перед помещением в видеопамять, и разбираться, какое там сжатие и т.п. Если есть эмулятор с пошаговой трассировкой и отображением содержимого видеопамяти, то можно так: выясняем, в какой момент в видеопамять кидаются данные (нет надписей - есть надписи); трассируем этот момент, следя за искомым тайлом в видеопамяти. Как только там начинает появляться изображение надписей, смотрим, где сейчас находится процессор, далее как обычно: разбираем код, смотрим, откуда идёт чтение последовательности байт и что происходит с данными перед записью в видеопамять. Только я сомневаюсь, что есть эмуляторы PCE/TG16 с приличными отладочными возможностями.
- Графика не сжата, но не хранится в ROM'е в виде готовых тайлов. В этом случае тайлы в видеопамяти создаются программно, например, на основе 1-битного шрифта. Разница между сжатием и таким случаем не очень принципиальна, но будет проще разобраться с форматом хранения исходных данных.
Ещё по поводу сжатия. Когда ты нашёл данные в ROM'е, от изменения которых меняется искомое изображение, можно выяснить, сжаты эти данные, или нет, следующим образом. Если от изменения любого одиночного байта всегда изменяется одинаковое количество точек изображения (2, 4 или 8, не больше) - данные не сжаты. Если в зависимости от того, какой из байт последовательности был изменён, количество изменившихся точек меняется - данные сжаты. Скажем, если меняешь один - изменяется одна точка; меняешь другой - меняется цвет сразу целой последовательности точек; меняешь третий - меняется длина этой последовательности- то, вероятно, данные сжаты RLE. Под последовательностью точек имеется в виду последовательность с учётом организации данных в тайле - , а не просто горизонтальная линия. |
|
Вернуться к началу |
|
|
Mefistotel RRC2008
Зарегистрирован: 08.03.2008 Сообщения: 294 Откуда: МАГАДАН
|
Добавлено: Сб Авг 09, 2008 3:46 pm Заголовок сообщения: |
|
|
Блин, я просто начинаю... балдеть. Моё желание перевести эту игру растёт с каждой секундой. Завтра обязательно посмотрю, у меня сейчас час ночи и в 6утра вставать! Этот посто delete и скажу, что к чему в моём случае, основываясь на твоих ответах. |
|
Вернуться к началу |
|
|
Mefistotel RRC2008
Зарегистрирован: 08.03.2008 Сообщения: 294 Откуда: МАГАДАН
|
Добавлено: Вс Авг 10, 2008 1:48 am Заголовок сообщения: |
|
|
Цитата: | Только я сомневаюсь, что есть эмуляторы PCE/TG16 с приличными отладочными возможностями. |
В данное время AamirM ваяет свой эмуль турбографа - Turbo Engine... В первой же бете(0.1 beta), эмуль обладает отличной соместимостью. Может он сделает отладчик и другие инструменты для ромхакинга.
Судя по всему, изменение одного байта приводит к разному изменению точек, НО не всех байтов. Изменение большинства байтов цепочки приводит к полному краху всех нужных мне надписей.
Пока нашёл байты, которые относятся к надписи SELECT ITEM в режиме паузы. Здесь менялось не только по 8 точек, но и длина цепочки и её цвет.
Тогда как, в надписи Item on Use менялось по 2 точки....а еще, изменив один байт, изменились пиксели в обоих надписях...
Ответ напрашивается сам за себя - данные сжаты, каким-либо алгоритмом типо RLE.
Если затронут байт, сигнализирующий о его применение, вся надпись идёт крахом... В принципе, знакомая ситуация... Но я решал эту проблему с текстом, а здесь точки... И была выявлена закономерность, поэтому и разобрался. А в данном случае какой-то хаотичный поток байтов, на первый взгляд, не имеющий никакой закономерности.
Shiru, что посоветуешь делать при сложившихся обстоятельствах и отсутствии нормальных отладочных средств?? Попробую скачать эмуль Ootake - в нём вроде есть функция дебага...
Последний раз редактировалось: Mefistotel (Вс Авг 10, 2008 4:20 am), всего редактировалось 1 раз |
|
Вернуться к началу |
|
|
Mefistotel RRC2008
Зарегистрирован: 08.03.2008 Сообщения: 294 Откуда: МАГАДАН
|
Добавлено: Вс Авг 10, 2008 2:31 am Заголовок сообщения: |
|
|
Что-то форум глюканул.
Последний раз редактировалось: Mefistotel (Вс Авг 10, 2008 4:12 am), всего редактировалось 1 раз |
|
Вернуться к началу |
|
|
Shiru
Зарегистрирован: 25.10.2006 Сообщения: 295 Откуда: Russia, Moscow
|
Добавлено: Вс Авг 10, 2008 2:57 am Заголовок сообщения: |
|
|
Mefistotel писал(а): | В данное время AamirM ваяет свой эмуль турбографа - Turbo Engine... Может он сделает отладчик и другие инструменты для ромхакинга. |
Это когда ещё будет, учитывая, что он одновременно тянет Regen.
Я смотрю, отладочные средства есть в Mednafen. Судя по документации они очень даже развитые, однако с первой попытки я смог вызвать только окно CPU, а просмотр VRAM и т.п. почему-то не вызывается (м.б. невнимательно читал документацию). Но есть одна проблема - размер шрифта в дебаггере явно расчитан на работу в кинотеатре. На 19'' читать эти микроскопические закорючки почти невозможно. |
|
Вернуться к началу |
|
|
Shiru
Зарегистрирован: 25.10.2006 Сообщения: 295 Откуда: Russia, Moscow
|
Добавлено: Вс Авг 10, 2008 4:29 am Заголовок сообщения: |
|
|
После второго подхода к Mednafen:
- Размеры шрифта в дебаггере настраиваются в километровом (две тысячи строк!) конфиг-файле, причём отдельно для разных систем и только для окна дизассемблера (pce.debugger.disfontsize).
- С просмотром VRAM проблем нет, это я сначала прочитал Alt+1 как Alt+F1 и т.д. В остальных окнах дебаггера шрифт не такой мелкий.
Неудобно, что просмотр CPU и VRAM в разных окнах - при трассировке надо щёлкать туда-сюда, чтобы видеть изменения. Но в отладчике есть много всяких возможностей, так что, м.б., это не является проблемой. Вроде-бы есть точки останова при доступе к VRAM (Aux R/W breakpoints) - с ними не потребуется трассировать: нужно только вычислить адрес нужного тайла в VRAM и поставить точку останова. |
|
Вернуться к началу |
|
|
Mefistotel RRC2008
Зарегистрирован: 08.03.2008 Сообщения: 294 Откуда: МАГАДАН
|
Добавлено: Вс Авг 10, 2008 5:52 am Заголовок сообщения: |
|
|
Я сейчас жду пока мне на айфолдер зальют последнюю версию Меднафена (кстати, уже залили только не туда). С сайта я скачать не могу, так как у меня блок на сервере. Только почта и почему-то айфолдер. А пока читаю доку по VDC, попутно пытаясь перевести её на русский язык.
Так кое-что понятно, как скинут, то отпишусь.
На нес адрес тайла в Ppu и его значение узнается через Name table viewer, а каким образом здесь узнать адрес тайла в видеопамяти?
Эксперимент? Неплохо бы разобраться в этом... а ещё лучше сделать доку по отладчику. Но вот, кто это сделает, если не мы. |
|
Вернуться к началу |
|
|
Shiru
Зарегистрирован: 25.10.2006 Сообщения: 295 Откуда: Russia, Moscow
|
Добавлено: Вс Авг 10, 2008 6:16 am Заголовок сообщения: |
|
|
Mefistotel писал(а): | а каким образом здесь узнать адрес тайла в видеопамяти? |
Alt+D (дебаггер), Alt+2 (просмотр VRAM), стрелками прокрутить вниз, навести мышку на нужный тайл, умножить его номер (отображается на экране) на 32.
iFolder |
|
Вернуться к началу |
|
|
Mefistotel RRC2008
Зарегистрирован: 08.03.2008 Сообщения: 294 Откуда: МАГАДАН
|
Добавлено: Вс Авг 10, 2008 6:37 am Заголовок сообщения: |
|
|
Уф, Shiru, спасибо.
Уж не знаю, что будет дальше, но разобраться надо во что бы то ни стало, и не важно сколько на это уйдёт времени. После работы испытаю отладчик. Но так как я совсем зеленый в этом, то быстрого результата не гарантирую. |
|
Вернуться к началу |
|
|
Mefistotel RRC2008
Зарегистрирован: 08.03.2008 Сообщения: 294 Откуда: МАГАДАН
|
Добавлено: Вс Авг 10, 2008 11:20 am Заголовок сообщения: |
|
|
В доке про контроллер, у меня возникли вопросы:
Цитата: | The way graphical data is organized in the VRAM is called 'tile
based'. This means there is NOT a huge bitmap containing a color
index for every pixel, but only a list of pointers to small,
rectangular areas in the VRAM that will, aligned to each other,
make up the display. Explanation follows. |
Графические данные распределены в Vram методом, названным "tile based" --- "На основе тайлов" и означает, что в видеопамяти нет огромного битового массива, содержащего индексы цвета для каждого пикселя, а есть только список пойнтеров(указателей) на маленькие прямоугольные области в Vram, которые выравнены по отношению друг к другу и образуют изображение.
Поподробнее можешь обьяснить суть этого метода. Это именно так, как видно в Vram??/
Цитата: | In the background, colour 0 of all palettes are equal. Colour 0 of
palette 0 determines colour 0 of all the background palettes. Even
though these colour CAN be set independently, the screen will not
reflect these settings. |
На заднем плане(бекграунд), цвет с индексом 0 в каждой палитре одинаков. Цвет с индексом 0 из палитры с индексом 0 определяет цвет 0 из всех палитр заднего фона.
Хотя цвет, МОЖЕТ быть установлен независимо для всех палитр.
экран не будет отражать эти параметры настройки.
В общем...чешу голову..
Так,начинаю потихоньку разбираться с эти зверем...
Что бы запустить эмуль пришлось в свойствах рома присвоить его эмулю. В свернутом режиме он нормально работал, но в развернутом... Игра очень медленно идёт.
Я в курсе ,что его запускать через командную строку, но как Run mednafen.exe ,или как?
Увеличил шрифт окна дизассемблера(сам бы не догадался!), но другие шрифты других окон стали ещё меньше... Ну да ,черт с ними.
Теперь я вижу какая она, видеопамять консоли... Это действительно красиво!! Графика распакована и лежит как на ладони!
Выбираю тайл первой буквы в слове KEY = N710, адрес 7100.
71*32=hx2272 На это значение надо поставить бряк... извини, но я не нашёл команды Aux R/W breakpoints, т.е. где ставится точка остонова... Чуть глаза себе не сломал на своей 17". Итак слепой, но исскуство требует жертв.
И ещё вопрос, как сдампить дизассемблированный код, если бряк я всё-таки поставлю?? Если такое, конечно, возможно.
Опыта общения с дебаггерами практически нет, но чоень хочу научиться. В окне дебага просто КУЧА строк с различными параметрами, которые можно вводить! Где про это можно прочитать и про инструкции процессора HuC6270?
Последний раз редактировалось: Mefistotel (Вс Авг 10, 2008 12:02 pm), всего редактировалось 1 раз |
|
Вернуться к началу |
|
|
Shiru
Зарегистрирован: 25.10.2006 Сообщения: 295 Откуда: Russia, Moscow
|
Добавлено: Вс Авг 10, 2008 11:53 am Заголовок сообщения: |
|
|
Mefistotel писал(а): | Графические данные распределены в Vram методом, названным "tile based" |
Это о том, что на приставках нет буфера растра, который есть на большинстве компьютеров (массив данных размером с экран, где каждой точке соответствует свои несколько байт). Вместо этого там подобие текстового режима, где есть 'текст' (карта тайлов) и 'символы' (сами тайлы). Плюс спрайты, которые аппаратно отображаются поверх этого 'текста' и не требуют запоминания-восстанавливания фона под ними.
Цитата: | In the background, colour 0 of all palettes are equal. |
Там 16 палитр по 16 логических цветов в каждой. Каждому тайлу и спрайту можно назначить одну из этих палитр. Каждому из 16 логических цветов в каждой палитре назначается реальный цвет (из 512 возможных, 9-битное значение). Но логический цвет с индексом 0 во всех палитрах всегда будет отображаться реальным цветом, заданным для логического цвета 0 в нулевой палитре.
'Цвет' одной точки тайла определяется 4 битами. Но это не реальный цвет, который отображается на экране (т.к. реальный цвет является 9-битным значением), а индекс логического цвета в палитре. Видеоконтроллер берёт реальный цвет из выбранной для тайла палитры, из ячейки, адресуемой кодом точки. Таким образом графику тайла можно отображать разными цветами, выбирая для него разные палитры либо меняя цвета в этих палитрах (например, для эффекта плавного гашения экрана).
Цитата: | в курсе ,что его запускать через командную строку, но как Run mednafen.exe ,или как? |
Просто перетащи ROM на exe-шник. Либо сделай bat-файл с одной строчкой: mednafen имя_файла.pce
Цитата: | Выбираю тайл первой буквы в слове KEY = N710, адрес 7100.
710*32=hx22720 |
Я не обратил внимания, там отображается сразу номер тайла и его адрес (оба значения в hex). Однако, отображается он довольно странно: на один тайл там получается 16 байт (т.е. адрес отображается как номер тайла с дополнительным нулём). Вероятно, там используется две линейки 4-битной памяти, или что-то типа того, и адреса считаются по полутайлам. Надо полагать, для точки останова адрес надо задавать в том формате, в котором он отображается в отладчике.
Цитата: | , но я не нашёл команды Aux R/W breakpoints, т.е. где ставится точка остонова... |
Там есть документация (debugger.html).
Последовательность действий примерно такая:
- Запускаем игру, идёт начальное меню
- Alt+D (отладчик), Ctrl+W (поставить aux write breakpoint - точку останова на запись в видеопамять), вводим 7100
- Убираем отладчик, жмём старт
- Окно отладчика само появится, когда сработает точка останова (после заставки)
- Теперь ты видишь код, который пишет данные в эту область видеопамяти (текущая команда выделена красным). Правда, ты не видишь содержимое видеопамяти, т.к. в этот момент установлен чёрный цвет во всех логических цветах всех палитр. Но можно включить серую отладочную палитру кнопками <>.
Теперь берёшь доку по командам 6502 и начинается самое интересное и сложное - надо понять, что делает этот код, который пишет данные в видеопамять. Ты можешь прошагать код по одной команде, нажимая S, и увидишь, что работает некий программный цикл, что логично для такой вещи, как передача последовательности данных в видеопамять. Ты также видишь текущие значения регистров и их изменение в процессе выполнения кода. Берёшь справочник и пишешь себе объяснение на человеческом языке, что делает каждая команда наблюдаемого кода. Потом из этого описания пытаешься понять, что делает код в целом. В частности, тебе надо выяснить, из какого места ROM'а читаются данные перед их засылкой в видеопамять (логично, что этот адрес будет похож на найденный корруптором, но учитывая страничную организацию памяти). |
|
Вернуться к началу |
|
|
Mefistotel RRC2008
Зарегистрирован: 08.03.2008 Сообщения: 294 Откуда: МАГАДАН
|
Добавлено: Вс Авг 10, 2008 12:23 pm Заголовок сообщения: |
|
|
Я уж не знаю, как тебя благодарить за такие разъяснения.
Ты мне как...как.. учитель что-ли...
А почему инструкции по 6502??? Это же процессор Нес... То есть инструкции в восьмиразрядных центральных процессорах одинаковые??? Тогда я могу узнать и про НЕС и про Турбограф?!?
И какой посоветуешь лучше справочник команд асма взять?
И если я правильно понял сдампить диассем.код в текстовый файл не выйдет??? |
|
Вернуться к началу |
|
|
Shiru
Зарегистрирован: 25.10.2006 Сообщения: 295 Откуда: Russia, Moscow
|
Добавлено: Вс Авг 10, 2008 12:41 pm Заголовок сообщения: |
|
|
Mefistotel писал(а): | А почему инструкции по 6502??? Это же процессор Нес... |
В NES и TG16/PCE используются модифицированные варианты 6502. Команды соответствуют обычному 6502, плюс есть незначительные отличия, касающиеся недокументированных команд, режима BCD и дополнительной аппаратуры в составе процессора (у PCE - управление банками памяти).
Mefistotel писал(а): | То есть инструкции в восьмиразрядных центральных процессорах одинаковые??? |
Нет. Есть два популярных 8-разрядных процессора - 6502 и 8080/Z80. Есть и другие процессоры, но они встречаются очень редко. Если знаешь 6502 - то можешь работать с NES, всеми версиями TG16/PCE, всеми 8-разрядными системами Atari и Commodore, всякими Apple II и BBC Micro, даже со SNES (там 16-разрядный процессор, являющийся развитием 6502). Если знаешь Z80 (его набор команд включает все команды 8080 с бинарной совместимостью) - можешь работать с ColecoVision, 8-разрядными системами Sega, всеми Gameboy, всякими Amstrad CPC, MSX, ZX Spectrum и т.д.
Цитата: | И какой посоветуешь лучше справочник команд асма лучше взять? |
Бери все, какие найдёшь - м.б. тебе один окажется понятнее, чем другой. Так как процессор популярный, документации много, должна быть даже на русском (он использовался в наших Агатах).
Цитата: | И если я правильно понял сдампить диассем.код в текстовый файл не выйдет??? |
Вроде не выйдет, но там есть возможность сохранения нужной области памяти в бинарный файл. Потом можно дизассемблировать его отдельным дизассемблером в текстовый файл. |
|
Вернуться к началу |
|
|
Mefistotel RRC2008
Зарегистрирован: 08.03.2008 Сообщения: 294 Откуда: МАГАДАН
|
Добавлено: Вс Авг 10, 2008 1:44 pm Заголовок сообщения: |
|
|
Ну, хоть у меня туча вопросов(как обычно ), но я уйду в андеграунд. Буду изучать команды... и прочее... Если что буду спрашивать по дизассемблированному коду. Так сказать, мысли вслух...
В общем, ещё раз спасибо... |
|
Вернуться к началу |
|
|
Марат
Зарегистрирован: 08.01.2008 Сообщения: 211 Откуда: Казахстан, Астана
|
Добавлено: Вс Авг 10, 2008 1:46 pm Заголовок сообщения: |
|
|
Mefistotel писал(а): |
И какой посоветуешь лучше справочник команд асма взять?
|
Вот здесь интересная дока по ассемблеру 6502, в частноти Nes. http://tv-games.narod.ru/library/nes.htm |
|
Вернуться к началу |
|
|
Mefistotel RRC2008
Зарегистрирован: 08.03.2008 Сообщения: 294 Откуда: МАГАДАН
|
Добавлено: Вс Авг 10, 2008 2:14 pm Заголовок сообщения: |
|
|
Эх, Марат я эту доку на инглише переводить только полгода буду для себя... Буду на русском искать. Тем более они есть, доки по асму 6502. Чтобы сразу понимать что к чему.
Скачал, про архитектуру и программирование Nes. Может пригодится.
Последний раз редактировалось: Mefistotel (Вс Авг 10, 2008 2:42 pm), всего редактировалось 1 раз |
|
Вернуться к началу |
|
|
Марат
Зарегистрирован: 08.01.2008 Сообщения: 211 Откуда: Казахстан, Астана
|
Добавлено: Вс Авг 10, 2008 2:18 pm Заголовок сообщения: |
|
|
Mefistotel писал(а): | Эх, Марат я эту доку на инглише переводить только полгода буду для себя... Буду на русском искать. Тем более они есть, доки по асму 6502. Чтобы сразу понимать что к чему. |
Да я про доку "Архитектура и программирование Dendy." на русском языке от Migera'ы. Самая первая в списке. |
|
Вернуться к началу |
|
|
Shiru
Зарегистрирован: 25.10.2006 Сообщения: 295 Откуда: Russia, Moscow
|
Добавлено: Пн Авг 11, 2008 9:36 am Заголовок сообщения: |
|
|
Надо заметить, что справочники по 6502 - не учебники. Они описывают, как устроен процессор и как работает каждая его команда, но не дают примеров, которые можно было-бы разобрать и увидеть, каким образом отдельные команды реализуют программу, выполняющую некоторое действие.
Привожу несколько простейших примеров с комментариями.
Простая запись одного байта по определённому адресу в памяти:
Код: | LDA #$10 ; загружаем в аккумулятор (регистр A) значение (10h, $ означает hex), которое мы хотим записать в память
STA $8000 ; записываем значение из регистра A в память по адресу 8000h |
В этом примере оба параметра (значение для записи и адрес) заданы непосредственно в коде. Если мы хотим записать 4 байта подряд по адресам 8000h..8003h, мы можем сделать так:
Код: | LDA #$10
STA $8000 ; пишем A в 8000h
STA $8001 ; пишем A в 8001h
STA $8002 ; пишем A в 8002h
STA $8003 ; пишем A в 8003h |
Можно заметить, что это очень неудобно - чем больше байт подряд нужно записать, тем больше команд потребуется, и в каждой команде записи нужно указывать адрес.
Чтобы записать некоторое количество байт подряд, начиная с определённого адреса, можно организовать цикл:
Код: | LDX #3 ; загружаем в регистр X количество байт, которые надо записать, минус 1 (т.е. этот код запишет 4 значения)
LDA #$10
loop ; это не команда, а метка - 16-битное значение, представляющее адрес следующей за меткой команды
STA $8000,X ; пишем A по адресу $8000+значение в регистре X
DEX ; уменьшаем значение в регистре X на 1 (если оно было 0, то станет 255, т.к. регистр однобайтовый)
BPL loop ; это условный переход. Если в результате предыдущей арифметической или логической операции было получено значение <128, произойдёт переход на указанный адрес, т.е. команду, перед которой стоит метка loop; иначе выполнение кода продолжится - цикл завершится |
В процессе работы этого цикла произойдёт 4 итерации:
0: запись A в $8000+3, X станет 2, произойдёт переход (после уменьшения X получилось значение <128)
1: запись A в $8000+2, X станет 1, произойдёт переход
2: запись A в $8000+1, X станет 0, произойдёт переход
3: запись A в $8000+0, X станет 255, переход не произойдёт (после уменьшения X получилось значение >128)
У этого кода есть две особенности - он пишет значения не от $8000 к $8003, а наборот (с конца); и он не может записать больше 128 байт (т.к. X однобайтовый и условие перехода X<128).
Аналогичным образом можно разобрать любой код, используя общие знания об устройстве 6502 и описание его команд. |
|
Вернуться к началу |
|
|
|
|
Вы не можете начинать темы Вы можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах
|
Powered by phpBB © 2001, 2005 phpBB Group
|