Важная информация

User Tag List

Страница 1 из 6 12345 ... ПоследняяПоследняя
Показано с 1 по 10 из 52

Тема: GameBoy ROM disassembly

  1. #1
    Administrator Аватар для CityAceE
    Регистрация
    13.01.2005
    Адрес
    г. Москва
    Сообщений
    4,733
    Записей в дневнике
    7
    Спасибо Благодарностей отдано 
    473
    Спасибо Благодарностей получено 
    1,304
    Поблагодарили
    433 сообщений
    Mentioned
    49 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию GameBoy ROM disassembly

    В рамках вот этой темы решил покопаться в потрохах GameBoy'евской Зельды. Вначале через эмулятор BGB. Там, конечно, и дизассемблер есть, и отладчик, но всё равно мало что понятно - хочется иметь полный листинг перед глазами, чтобы можно было процедуры и переменные переименовать для более глубокого понимания. Попробовал разные инструменты, которые смог найти, а именно:

    1. Эмуляторы BGB и no$gmb. Результат обоих эмуляторов совершенно одинаков, видимо, они близкие родственники. В общем-то, из них можно выгрузить дизассемблер доступной для Z80 памяти, но там есть лишние колонки и работать с метками в текстовом редакторе в итоге оказывается, мягко говоря, не слишком удобно. Опять же, нет доступа к коду, который располагается в неактивных в данный момент банках ПЗУ.

    Код:
    ROM0:28C5 2A               ldi  a,(hl)
    ROM0:28C6 12               ld   (de),a
    ROM0:28C7 13               inc  de
    ROM0:28C8 0B               dec  bc
    ROM0:28C9 78               ld   a,b
    ROM0:28CA B1               or   c
    ROM0:28CB 20 F8            jr   nz,28C5
    ROM0:28CD C9               ret
    2. gb-disasm - результат понравился. На выходе имеем полноценный листинг. Кроме того, данный дизассемблер пытается понять, что было переключение банка памяти и дизассемблирует этот дополнительный код. Но в результате работы остаётся слишком много мест, которые данный дизассемблер отказывается распознавать. В результате имеем такой листинг:

    Код:
    jmp_8b:
        LD A,$0C
        LD [$2100],A
        RET
    
        INCBIN "Legend of Zelda, The - Link's Awakening (USA, Europe).gb",$91,$100-$91
    
        NOP
        JP jmp_150
    
        INCBIN "Legend of Zelda, The - Link's Awakening (USA, Europe).gb",$104,$150-$104
    
    jmp_150:
        CALL sub_2881
        LD SP,$DFFF
        XOR A
        LDH [$47],A    ;bg pal    
        LDH [$48],A    ;obj pal0
        LDH [$49],A    ;obj pal1
        LD HL,$8000
        LD BC,$1800
        CALL sub_2999
        CALL sub_28a8
        CALL sub_298a
    3. GameBoy Assembler Plus - может дизассемблировать куски кода, но при попытке дизассемблировать весь ROM начисто вешается. Получаемый листинг имеет такой вид:

    Код:
    #org 28C5
    Label28C5:
    ldi a,(hl)
    ld (de),a
    inc de
    dec bc
    ld a,b
    or a,c
    jr nz,Label28C5
    ret
    4. IDA Pro - хотя эта программа в моём списке и последняя, но этот инструмент, самый первый, который приходит в голову, когда хочется что-то дизассемблировать. Инструмент очень мощный, с кучей возможностей, но, к сожалению, в силу отсутствия опыта и полноценной документации, у меня до конца не получается настроить эту среду на работу с образом GB-игры.

    Прежде всего я снял дамп памяти из эмуляторы и с помощью IDA Pro попытался дизассемблировать его. Попереименовывал некоторые переменные и процедуры. Всё здорово: меняешь в одном месте - меняется везде! Кое-что с кодом начало проясняться. Но вот я добрался до переключения банков памяти. По началу всё было нормально - переключение использовалось для переброса данных из дополнительной памяти в ВидеоОЗУ. Но потом я добрался до таких конструкций:

    Код:
    ROM:03B5                 ld      a, 1
    ROM:03B7                 ld      [BANK], a
    ROM:03BA                 call    sub_5D03
    ROM:03BD                 ld      a, $1F
    ROM:03BF                 ld      [BANK], a
    ROM:03C2                 call    loc_7F80
    Инструкция ld [BANK],a включает в адресное пространство #4000-#7FFF банк памяти, указанный в регистре a. И видно, что после этого вызывается код из этих страниц. В эмуляторе я могу всё это протрассировать, но как поступить в IDA Pro? Всё, что у меня получается сделать - это жёстко задать в указанном диапазоне какую-то одну страницу.

    Поискал как народ поступает. Но всё, что удалось найти - это только лоадер, который сам разбивает память на сегменты, распознаёт заголовок и задаёт имя стандартным системным переменным. Однако при использовании данного лоадера вообще игнорируется код, который располагается выше #4000. То есть дизассемблировать можно только первые 16к картриджа.

    Не может быть, чтобы такая мощная программа, как IDA Pro, не умела бы переключать страницы ПЗУ! Но вот у меня никак не получается Может быть кто-то, кто более продвинут в IDA Pro, подскажет как это сделать? Или есть ещё какие-то мысли?
    С уважением, Станислав.

  2. #1
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

  3. #2
    Guru Аватар для Shiny
    Регистрация
    19.01.2017
    Адрес
    г. Арзамас
    Сообщений
    2,343
    Записей в дневнике
    42
    Спасибо Благодарностей отдано 
    7
    Спасибо Благодарностей получено 
    122
    Поблагодарили
    91 сообщений
    Mentioned
    7 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    IDA для х86 создает сегменты. Может, попробовать для gbz80? Не знаю как.

  4. #3
    Administrator Аватар для CityAceE
    Регистрация
    13.01.2005
    Адрес
    г. Москва
    Сообщений
    4,733
    Записей в дневнике
    7
    Спасибо Благодарностей отдано 
    473
    Спасибо Благодарностей получено 
    1,304
    Поблагодарили
    433 сообщений
    Mentioned
    49 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Шынни Посмотреть сообщение
    Может, попробовать для gbz80?
    Пробовал по разному, но результата добиться не получается. И примеров найти в сети не могу.
    С уважением, Станислав.

  5. #4
    Guru Аватар для Shiny
    Регистрация
    19.01.2017
    Адрес
    г. Арзамас
    Сообщений
    2,343
    Записей в дневнике
    42
    Спасибо Благодарностей отдано 
    7
    Спасибо Благодарностей получено 
    122
    Поблагодарили
    91 сообщений
    Mentioned
    7 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    А можно ссылку на ROM Zelda?

  6. #5
    Administrator Аватар для CityAceE
    Регистрация
    13.01.2005
    Адрес
    г. Москва
    Сообщений
    4,733
    Записей в дневнике
    7
    Спасибо Благодарностей отдано 
    473
    Спасибо Благодарностей получено 
    1,304
    Поблагодарили
    433 сообщений
    Mentioned
    49 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Но, вот, например.
    С уважением, Станислав.

  7. #6
    Guru Аватар для HardWareMan
    Регистрация
    26.02.2011
    Адрес
    г. Павлодар, Казахстан
    Сообщений
    4,508
    Спасибо Благодарностей отдано 
    361
    Спасибо Благодарностей получено 
    634
    Поблагодарили
    473 сообщений
    Mentioned
    10 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Учись писать лодырь под ИДУ. Санч написал свой для NES и там нормально банки разбиваются и дизаются. Я написал свой для MD, но там переключений то и нет. И ты давай пиши нормальный.

  8. #7
    Administrator Аватар для CityAceE
    Регистрация
    13.01.2005
    Адрес
    г. Москва
    Сообщений
    4,733
    Записей в дневнике
    7
    Спасибо Благодарностей отдано 
    473
    Спасибо Благодарностей получено 
    1,304
    Поблагодарили
    433 сообщений
    Mentioned
    49 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от HardWareMan Посмотреть сообщение
    Учись писать лодырь под ИДУ.
    Я чем-то обидел? Почему я вижу хамство в свой адрес?
    С уважением, Станислав.

  9. #8
    Master
    Регистрация
    11.04.2006
    Адрес
    Novosibirsk
    Сообщений
    969
    Спасибо Благодарностей отдано 
    4
    Спасибо Благодарностей получено 
    9
    Поблагодарили
    7 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от CityAceE Посмотреть сообщение
    Я чем-то обидел? Почему я вижу хамство в свой адрес?
    Да вроде никакого хамства. Через написание лодыря решается этот вопрос. SDK в комплекте с идой идет. А лодырь писать форумчане вам не будут. Не потому-что свиньи, а потому-что эт им не надо. А вам надо. Вам и писать.

  10. #9
    Guru Аватар для HardWareMan
    Регистрация
    26.02.2011
    Адрес
    г. Павлодар, Казахстан
    Сообщений
    4,508
    Спасибо Благодарностей отдано 
    361
    Спасибо Благодарностей получено 
    634
    Поблагодарили
    473 сообщений
    Mentioned
    10 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    CityAceE, никакого хамства. ram_scan верно говорит. Мне нужен был лодырь на MD - никто не хотел писать, пришлось писать самому. А потом, что забавно, на основе моего лодыря сделали другой, с карточными играми и куртизанками, но уже буржуи в комьюнити по MD. Вот такая она, жизнь, много несправедливости в ней... (с)

  11. #10
    Guru
    Регистрация
    16.12.2009
    Адрес
    Харьков
    Сообщений
    4,734
    Спасибо Благодарностей отдано 
    360
    Спасибо Благодарностей получено 
    374
    Поблагодарили
    241 сообщений
    Mentioned
    11 Post(s)
    Tagged
    1 Thread(s)

    По умолчанию

    HardWareMan, ram_scan, ваш сленг просто не поняли.
    CityAceE, лодырь=loader.
    Profi must live!

    Моё железо...

    1. Profi 5.06/1Mb(DRAM)+Profi5.06(UP)/HDD/3`5FDD/CF512Mb/SD-CARD
    3. Profi 6.2 Rev. B/1Mb/3`5FDD/HDD3.2Gb
    4. Profi 5.05(down)/1Mb+Profi 5.03(UP)/Pentagon_Fix
    Все укомплектованы:
    Profi_ZX-BUS/ZXMC2/NemoIDE/SounDrive
    [свернуть]

    Ссылка на Telegram-канал поддержки пользователей Profi.

Страница 1 из 6 12345 ... ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Service rom + 128 basic rom
    от VELESOFT в разделе Оси
    Ответов: 1
    Последнее: 24.03.2013, 04:48
  2. GAMEBOY CLASSIC хочу
    от newart в разделе Барахолка (архив)
    Ответов: 3
    Последнее: 19.06.2011, 15:27
  3. Sea Dragon GameBoy
    от nzeemin в разделе Nintendo
    Ответов: 18
    Последнее: 08.05.2011, 16:23
  4. Advanced ROM Manager (ROM Switvcher + Prof. ROM)
    от Alex_NEMO в разделе Память
    Ответов: 4
    Последнее: 04.10.2010, 11:43
  5. Nintendo GameBoy
    от BYTEMAN в разделе Nintendo
    Ответов: 13
    Последнее: 28.07.2010, 11:55

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •