PDA

Просмотр полной версии : Исходный код на ассемблере Z80 игры The Legend of Zelda: Link's Awakening



CityAceE
31.01.2017, 07:19
Данная тема является попыткой заинтересовать и привлечь к проекту программистов, чтобы совместными усилиями получить исходный код The Legend of Zelda: Link's Awakening путём дизассемблирования образа картриджа для игровой консоли Nintendo Game Boy.

Почему именно Game Boy, почему именно Zelda и для чего вообще всё это?

В основе Nintendo Game Boy лежит разновидность процессора Z80. Код, написанный для процессора Game Boy с незначительными доработками можно скомпилировать для обычного Z80. Game Boy и ZX Spectrum 128 по мощности, графике и звуку вполне сопоставимы. Таким образом вполне реально перенести игру с Game Boy на ZX Spectrum без ощутимого ущерба в качестве. Из исходных текстов в чистом виде можно взять игровую логику, текстовые сообщения, карту. Однако придётся адаптировать графику и звук, а также все процедуры, отвечающие за их вывод. Zelda была выбрана потому, что это общепризнанный шедевр. Это довольно интересная и объёмная игра, а игровой процесс не использует постоянный полноэкранный скролллинг, как, например, в Super Mario Bros., который является проблемой для ZX Spectrum.

Уже предпринимались попытки перенести данную игру на ZX Spectrum и выглядело это весьма достойно:

http://storage7.static.itmages.ru/i/15/1221/h_1450668678_4020062_06ab7f3d28.png http://storage5.static.itmages.ru/i/15/1221/h_1450668649_4409461_d377087064.png

http://storage6.static.itmages.ru/i/15/1221/h_1450668752_2737589_773b0ba4f9.png http://storage5.static.itmages.ru/i/15/1221/h_1450668732_2284849_e57a511a44.png

http://storage4.static.itmages.ru/i/15/1221/h_1450668907_5802472_582125de3b.png http://storage3.static.itmages.ru/i/15/1221/h_1450668884_3646788_eabf0f35e9.png

http://storage8.static.itmages.ru/i/15/1221/h_1450668987_4123083_80f6b72692.png http://storage6.static.itmages.ru/i/15/1221/h_1450668962_4290918_2cad2ba6e9.png

Что в итоге?

На основе исходных текстов можно будет:
1. Сделать 100%-ный порт для ZX Spectrum и для более продвинутых клонов. Для клонов с расширенными графическим режимами можно будет использовать цветную графику с Game Boy Advanced.
2. Сделать свою собственную Зельду по собственному сценарию, как это произошло с Castlevania: Spectral Interlude, в которую можно будет поиграть только на ZX Spectrum.

Не поленитесь, запустите эмулятор, загрузите в него Зельду и поиграйте хотя бы 15 минут! Убедитесь, что это достойная игра. Потом зайдите во встроенный отладчик и посмотрите на знакомый код Z80! Надеюсь, что кто-то не останется равнодушным и захочет поучаствовать в данном проекте. Я в одиночку это совершенно точно не потяну, поэтому для участия в проекте требуются люди, которым это будет реально интересно.

Что потребуется для работы:

1. Образ игры The Legend of Zelda: Link's Awakening (https://www.emuparadise.me/Nintendo_Game_Boy_ROMs/Legend_of_Zelda,_The_-_Link's_Awakening_(USA,_Europe)/69120)
2. Эмулятор консоли GameBoy - BGB (http://bgb.bircd.org/)
3. Интерактивный дизассемблер IDA Pro v6.8
4. Загрузчик игры в IDA Pro - 59592

Актуальная версия загрузчика приложена к этому сообщению. Я сделал её на основе вот этого (https://github.com/w4kfu/IDA_loader/blob/master/Nintendo_GB/nintendo_gb.py) скрипта, дополнив разбиением на страницы и их загрузкой.

Чтобы воспользоваться скриптом, необходимо скопировать его в папку loaders, которая расположена в папке с установленной программой, например c:\Program Files (x86)\IDA 6.8\loaders\. После этого, при попытке загрузить игровой ROM вы получите запрос на использование данного загрузчика:

http://storage4.static.itmages.ru/i/17/0131/s_1485824724_8168680_8b1f35c401.png (https://itmages.ru/image/view/5423140/8b1f35c4)

При этом произойдёт автоматический выбор типа процессора, распределение памяти на сегменты и их загрузка.

5. Плагин collabREate (http://www.idabook.com/collabreate/) для IDA Pro, который позволяет коллективно работать над одним проектом. Данный плагин подразумевает работу через сервер. Сервер у меня запущен и как только будут окончательно решены все проблемы с загрузчиком, наберутся желающие для участия в данном проекте, я заведу и раздам учетные записи.

Архитектура Game Boy:

Архитектура игровой консоли Nintendo Game Boy несложная. Вы легко и быстро сможете разобраться с ней, даже если вам никогда ранее не доводилось сталкиваться ни с чем, кроме ZX Spectrum. Практически всю исчерпывающую информацию вы сможете найти в этих трёх источниках:
1. Игровые Приставки - Ремонт и Обслуживание №21 (http://tv-games.ru/media/open/igrovie_pristavki_remont.html) - в данной книге на русском языке даются все основные сведения необходимые для понимания работы Game Boy. Вполне вероятно, что кроме этой книги вам больше ничего не понадобится.
2. Game Boy Programming Manual (http://www.chrisantonellis.com/files/gameboy/gb-programming-manual.pdf) - официальная документация от Nintendo на английском языке.
3. Game Boy CPU Manual (http://marc.rawer.de/Gameboy/Docs/GBCPUman.pdf) - неофициальная документация на английском языке по архитектуре и программированию Game Boy.

Об игре The Legend of Zelda: Link's Awakening:

Дата релиза - август 2003 года
Совокупный рейтинг игры по данным Gamerankings - 89.82% (http://www.gamerankings.com/gameboy/563277-the-legend-of-zelda-links-awakening/index.html)
Среднее время прохождения игры по данным GameFAQs - 27.6 часов (http://www.gamefaqs.com/gameboy/563277-the-legend-of-zelda-links-awakening/stats#time)
Язык игры - английской (существует качественный неофициальный русский перевод (http://shedevr.org.ru/zelda64rus/translations.html#la))

Карта игрового мира:
http://storage6.static.itmages.ru/i/17/0131/s_1485823235_2007299_550c115ea0.png (https://itmages.ru/image/view/5423124/550c115e)

Технические характеристики ROM'a:

Название - Legend of Zelda, The - Link's Awakening (USA, Europe)
MD5 - c4360f89e2b09a21307fe864258ecab7
Размер страницы - 16 Кб
Количество страницы - 32

Провел беглый анализ The Legend of Zelda: Link's Awakening. Всего в игре 32 банка по 16 Кб:

01 - код
02 - код, несколько спрайтов
04
05
06
07
08
09 - похоже на карту
10 - текст
11
12
13 - графика 100%
14 - графика 100%
15 - графика 100%
16 - графика 100% (логотип, фонт)

http://storage3.static.itmages.ru/i/15/1217/h_1450334986_8541157_956ad55cf7.png

17 - графика 100% (ещё один фонт)
18 - графика 100%
19 - графика 100%
20 - графика 100%
21 - текст
22
23 - текст
24 - титры
25
26
27 - половина свободна
28
29 - текст
30 - текст 100%

Make-up! Jewels!Dresses! I wantit all! Sigh...And some new accessories would be nice...яMake-up! Jewels!Dresses! I wantit all! Sigh...And some new accessories would be nice...Oh! That Ribbon!I need it! Willyou trade for mydog food? Yes No!юYou exchanged б for в! It^s fullof juicy beef!яLucky! Thanks! Well, here^s your в!яEh?! I can^t believe it! Youare the worst!!яI am Manbo, child of the SunFish! Have you got an Ocarina? Yes NoюVery well... Glub Blub Bloop!яAhaha! Then I can teach you mysong! Bloop!яYou^ve learned Manbo^s Mambo! When you get outof the water, play it!яI am Manbo, child of the SunFish! When you play my Mambo, you can warp to Manbo Pond! Trythis tune in thedungeons, too! Cha-cha-cha!яAha... You don^thave an Ocarina,so...Glub glub!яChickens these days don^t have the fighting spirit they usedto! In the old days, they couldfly, flap flap! But now, see? Cluck cluck!яWow! Amazing! That rooster is actually flying!It^s just like Isaid, eh? Have you tried to hold him over your head? CluckCluck!яWooo! Finally! This flying rooster is the greatest!я Here Sleeps The Flying RoosterяEnnh? Who^s this suspicious-looking runt?! Okay boys, let^sget ridda him!яYou must be an assassin sent byMadam MeowMeow to rescue the mutt! You came here to get me, but it is I who will get you!!

31
32

Итого в игре 128 кб графики и приблизительно 48 кб текста. Сколько именно в игре кода пока выяснить не удалось.

Полезные ссылки:

GameBoy ROM disassembly (http://zx-pk.ru/threads/27335-gameboy-rom-disassembly.html) - обсуждение проблем дизассемблирования ROM'ов приставки Game Boy.
Перенос игр с Game Boy на ZX Spectrum (http://zx-pk.ru/threads/25932-perenos-igr-s-game-boy-na-zx-spectrum.html) - обсуждение переноса The Legend of Zelda: Link's Awakening на ZX Spectrum.

AndyD
31.01.2017, 13:55
на иде 6.1 лоадер работает.

NEO SPECTRUMAN
01.02.2017, 19:34
А как в иде пометить что этот масив данных набор 16битных слов?
и как пометить что это набор адрессов (там оверчемдохера таблиц)

в иде вообще есть отмена? если я ткнул не туда а оно надизасемблировало кучу херни...

щас нет никакого желания выискивать просто...

- - - Добавлено - - -

какие есть(есть ли) компиляторы которые из коробки скомпилируют то что нефиговала ида?

Shiny
01.02.2017, 19:51
А как в иде пометить что этот масив данных набор 16битных слов?

наверное щелкнуть правой кнопкой мыши и выбрать Word?

AndyD
02.02.2017, 00:19
в иде вообще есть отмена?
кнопка U (undefine) отменит отмеченное.

и как пометить что это набор адрессов
по одному unc ,а как блоками тоже интересно.

CityAceE
02.02.2017, 03:06
А как в иде пометить что этот масив данных набор 16битных слов?
Про dw не скажу, но в db выделенный диапазон конвертируется путём нажатия на звёздочку на цифровой клавиатуре.


какие есть(есть ли) компиляторы которые из коробки скомпилируют то что нефиговала ида?
; Target assembler: RGBAsm (part of ASMotor)