| Разработка и ромхакинг > Ромхакинг и программирование |
| Нужна помощь по командам M68k |
| << < (3/6) > >> |
| GManiac:
Да есть такая, "Геймдев под 68к" |
| MetalliC:
нене, там геймдев, а тут "вижу две комманды, но не пойму что они делают" :lol: кстати спасибо, тема доставила |
| r57shell:
И вообще, в догонку, DrMefistO, ты же наверно пишешь на x86, x64 системах? На них абсолютно такие же правила. просто больше байтов. int a = -1 это 0xFFFFFFFF в памяти. а теперь отгадайте загадку на эту тему в каких случаях --- Код: ---int a; if (a == -a) printf("hoho!"); --- Конец кода --- выведет хохо? Кто не хочет "спойлерить" своё предположение в личку. |
| Ti_:
--- Цитата: r57shell от 14 Сентябрь 2012, 23:50:00 ---в каких случаях --- Код: ---int a; if (a == -a) printf("hoho!"); --- Конец кода --- выведет хохо? Кто не хочет "спойлерить" своё предположение в личку. --- Конец цитаты --- Подвох наверно какой с минус нулем связанный, может быть при 0 и 0x80000000. Что-то такое ты помню мне рассказывал. |
| r57shell:
Под предыдущим спойлером кроется истина. всё просто, как я и говорил, чтобы получить отрицательное число, можно из нуля вычесть число 0 - 0x80000000 = 0 - 0x80000000 то есть в бинарном 0000...0000 1000...0000 = 1000...0000 не забываем занять то, чего нет или другая известная формула для обратного кода x = (~x)+1 где ~ побитовое отрицание. то есть +x = 1000...0000 ~x = 0111...1111 -x = 1000...0000 (добавил 1) то есть для нуля и 0x80000000 будет x == -x истинно, а вот почему для остальных ложь... а не важно! :lol: |
| DrMefistO:
Продолжаю тему. Вопрос касаемо VDP: --- Код: ---ROM:00000580 move.w #$C000,($c00004).l ROM:00000584 move.w #$80,-(sp) ROM:00000588 move.w (sp)+,($c00004).l --- Конец кода --- Что делает данный набор команд? Не нашел в доках описания для первой команды. |
| GManiac:
В каких доках? VDP надо смотреть в доках по сеге, а не по 68к. В данном случае в порт C00004 пишется в два шага двойное слово #$C000 0080. В Sega Tech.doc в переводе от HWMan'а ищем C00004, затем запись в этот адрес. Там написано: ПЕРВЫЙ ВАРИАНТ ЗАПИСИ : УСТАНОВКА РЕГИСТРА D7 D6 D5 D4 1 0 0 RS4 У нас 1100, нам не подходит. Нам подходит ВТОРОЙ ВАРИАНТ ЗАПИСИ : УСТАНОВКА АДРЕСА D7 D6 D5 D4 CD1 CD0 A13 A12 смотрим табличку, понимаем, что у нас "ЗАПИСЬ В CRAM", но CD5 у нас равен 1, а в табличке 0. При этом ниже написано: Внимание! Код ID CD5 используется при инициализации и запуска сервиса DMA. При этом дополнительной информации обо всех вариантах кода ID нет. Будьте внимательны, в примерах указаны нормальные значения. Понимай как хочешь. |
| DrMefistO:
Да я в доках по VDP и смотрел. Но чего-то про два шага не подумал) Пасибо) |
| GManiac:
С вопросом по аппаратной части сеги можно сюда http://gendev.spritesmind.net/forum/index.php Что за игра хоть? Можно убрать эту команду и посмотреть, как отреагирует эмулятор. Если будут issue с палитрой, значит, эмулятор понимает этот код как запись в CRAM. |
| DrMefistO:
Собственно да, это запись в CRAM[0,0] с использованием DMA. Игра Quackshot. Добавлено позже: Т.к. до этого пишутся значения в регистры начальной адресации DMA. |
| Segaman:
такой метод видать для четкой реализации дма. там же дма заморочек много вроде записи из рам. вот они и задействовали стэк, потому что он в рам находится. |
| DrMefistO:
Bad Opcode. В хексе выглядит как F0 XX. К примеру F0 12. Как игра (Tecmo Cup) понимает такие команды? IDA их не знает. Но это точно код. Добавлено позже: Хм, при выполнении F0 12 отладчик идет на RESERV1. Как с этим разобраться? Еще позже: Я так понял, что F0 XX - это переход на вектор, где XX - номер вектора. Забавно. Непонятка: Но F0 42 куда идет? |
| GManiac:
Качай табличку http://www.emu-land.net/forum/index.php?topic=42330.0 А тут показано, как её можно красиво распечатать :) http://gendev.spritesmind.net/forum/viewtopic.php?p=12074 Коды Fx не будут работать, точнее, они автоматом сбрасываются на спец. вектор для обработки кодов Fx (один!), но вряд ли в обычных играх он зайдествован. |
| DrMefistO:
Спасибо, конечно, только я не понял, где в этой таблице эти коды? |
| GManiac:
В таблице как раз в группах 1010 и 1111 написано Invalid opcode. Нет таких кодов, они вызывают прерывание на вектора, которые в оригинальных доках называются Line-A emulator и Line-F emulator, и в тех же доках написано, что эти хексы оставлены на будущее или на кастомную реализацию опкодов разработчиком. Не знаю, с чего ты взял, что --- Цитата ---Но это точно код. --- Конец цитаты --- Не может такого быть. А если есть, значит, вектор в любой случае один, и надо смотреть обработчик в нём. |
| DrMefistO:
Точно код, т.к. посреди процедуры частяком в этой игре встречаются такие опкоды. И очень много F0 XX таких. 100% код. Возможно вектор один всего, это пока не проверил. |
| GManiac:
Называй точно игру и давай свою процедуру. Адрес её. И в каком месте игры вызывается. В Landstalker тоже часто встречаются байты-некоды посреди процедуры, но они перепрыгиваются предварительным вызовом некой процедурки и увеличением адреса возврата. |
| DrMefistO:
Игра: Tecmo Cup Football (J).bin Например процедура: адрес процедуры 0x63C, на 0x67E - опкод. Добавлено позже: Уверен, что код, т.к. эти опкоды даже не перепрыгиваются. И процедура нормальная. Добавлено позже: Вызывается в начале первого матча. |
| GManiac:
Ну, это тот редкий случай, когда реализован Line-F Emulator :) В обработчике же явно видно, что он берёт нижний байт команды и рассматривает его для прыжка на нужную подпрограмму (массив процедур). Точнее, это хорошо видно в эмуляторе. --- Код: ---_00001A7E: 206F 0002 MOVEA.L $0002(A7),A0 _00001A82: 3018 MOVE.W (A0)+,D0 _00001A84: 2F48 0002 MOVE.L A0,$0002(A7) _00001A88: 0240 00FF ANDI.W #$00FF,D0 _00001A8C: E548 LSL.W #$2,D0 _00001A8E: 207B 0010 MOVEA.L $00001AA0(pc,D0.W),A0 _00001A92: 4E90 JSR (A0) _00001A94: 40D7 MOVE SR,(A7) _00001A96: 4E73 RTE .. _00001AA0: 0000 0E04 _00001AA4: 0000 0E8A _00001AA8: 0000 0EAC _00001AAC: 0000 0ED6 _00001AB0: 0000 0F04 _00001AB4: 0000 0F3E _00001AB8: 0000 0FD0 _00001ABC: 0000 0FDC _00001AC0: 0000 0FC4 _00001AC4: 0000 0F78 _00001AC8: 0000 1A9A _00001ACC: 0000 1A9A _00001AD0: 0000 100E _00001AD4: 0000 100C .... --- Конец кода --- |
| Ti_:
--- Цитата: GManiac от 13 Октябрь 2012, 19:29:01 ---Ну, это тот редкий случай, когда реализован Line-F Emulator :) --- Конец цитаты --- А в каких целях разрабы столь извращались? То есть нафига это нужно вообще. Помню также что в comix zone используются #trap, а 2-байта следом за ним идущие тоже не код, а какие-то свойства для обработки. Я видел только один опкод который IDA не знает - ori #$700,ccr и подобное. |
| Навигация |
| Главная страница сообщений |
| Следующая страница |
| Предыдущая страница |