لعبة صبي روم disassembler.
يتطلب بيثون v3.6 أو أحدث.
تم تصميم ملفات التجميع التي تم إنشاؤها بواسطة MGBDIs ليتم تجميعها باستخدام RGBDS V0.6.0 أو أحدث.
تفكيك rom:
./mgbdis.py some-game.gb
الإخراج الافتراضي هو إلى دليل disassembly . يمكنك التحقق من نتيجة التفكيك عن طريق make ثم التحقق من ملف game.gb (أو game.gbc ) الذي تم إنشاؤه:
cd disassembly && make
هناك أيضًا عدد من الخيارات المتاحة للتحكم في تنسيق ونمط التعليمات لرمز التجميع الذي تم إنشاؤه. يمكنك عرضها عن طريق التشغيل:
./mgbdis.py -h
تتيح لك ملفات الرموز الإشارة إلى مكان وجود كتل البيانات والبيانات والاختبار وصور في ROM.
تتمتع إرشادات CPU Game Boy (SM83) بأطوال مختلفة ، ويمكن أن تكون البيانات متشابكة بالرمز في ROM ، لذلك لا يمكن دائمًا تحديد مكان بدء التعليم وتوقفه بدقة. يمكن أن يساعد تحديد كتل التعليمات البرمجية في ملف الرمز في تجنب مشاكل MGBDIS في محاولة تفكيك في منتصف التعليمات.
إذا لم يكن لديك ملف رمز ، فيمكنك محاولة توليد واحدة مع Game Boy Emulator - Beaten Dying Moon. يمكنك إما استخدام تجريبي الويب ، أو توجد بنيات متاحة لنظام التشغيل Windows و MacOS. يمكنه إنشاء ملف رمز مع تعريفات كتلة التعليمات البرمجية بناءً على عناوين التعليمات التي تم تنفيذها بالفعل أثناء لعب اللعبة ، وتجنب مشكلات محاذاة التعليمات.
لاستخدام ملف رمز مع MGBDIS ، يجب أن يكون موجودًا في نفس الدليل مثل ROM وله نفس الاسم ، باستثناء تغيير الامتداد ليكون .sym .
يجب أن تكون جميع القيم (باستثناء عرض الصورة) في سداسي عشري. تبدأ الإدخالات برقم بنك متبوعًا بالعنوان في الذاكرة.
يمكن تعريف أنواع الكتلة باستخدام ملصقات .code و .data و .text و .image السحرية ، تليها طول الكتلة في البايتات.
إضافة تسمية لبعض التعليمات البرمجية:
03:47f2 Read_Joypad_State
إضافة ملصق لـ 512 بايت من البيانات:
0d:4800 Level_Data
0d:4800 .data:200
إضافة ملصق لـ 16 بايت من النص:
00:3d00 Character_Name
00:3d00 .text:10
تتيح لك ملصق .image Magic تحديد كتل من 1 أو 2 بت بيانات بلاط بكسل في ROM. يتم إخراج الصور كملفات PNG في دليل /gfx للتفكيك ، ويتم تحويلها مرة أخرى إلى بيانات البلاط 1BPP أو 2BPP بواسطة Makefile باستخدام RGBGFX. إذا تم تحديد تسمية على عنوان كتلة الصورة ، فسيتم استخدامه لاسم ملف PNG.
يجب أن يكون طول الكتلة في البايتات مضاعفًا 16 ، حيث يتطلب كل بلاط 16 بايت من بيانات الصورة.
يمكن تحديد عرض الصورة بالبكسل كرقم عشري مسبوق مع w يجب أن تكون قيمة العرض مضاعفة 8 ، ويجب أن يؤدي مزيج طول الكتلة وعرض الصورة إلى صورة مستطيلة بدون أي بلاطات فارغة. عرض الصورة الافتراضي هو 128 بكسل ، أو إذا كان طول الكتلة يشير إلى عدد فردي من البلاط ، فسيتم إنشاء صورة تحتوي على صف واحد من البلاط.
اللوحة عبارة عن قيمة بحجم البايت تحدد ظلال رمادية لاستخدامها عند إنشاء الصورة. يستخدم نفس التنسيق مثل سجل BGP في 0xFF47 . يمكن تحديد القيمة في سداسي بادئة مع p . اللوحة الافتراضية هي E4 .
الافتراضي هو معاملته كـ 2 بت بيانات بلاط بكسل. يمكن توفير خيار 1bpp لعلاج البيانات على أنها 1 بت لكل بيانات بلاط بكسل.
إضافة ملصق لـ 1280 بايت من بيانات البلاط ، بعرض 128 بكسل ولوحة 0xe4:
02:791a Title_Screen_Tile_Data
02:791a .image:500:w128,pe4
الصورة الناتجة:
مثال على بيانات البلاط 1BPP:
05:4000 Font
05:4000 .image:200:w128,1bpp
الصورة الناتجة:
NOP تلقائيًا بعد STOP HALT ، وبالتالي فإن Disassembler سوف يخرج هذه ببايت البيانات إذا لم تتبع التعليمات NOP في ROM الأصلي. استخدم --disable-halt-nops مع MGBDIs لتوجيه RGBDs لتعطيل إدخال تعليمات NOP التلقائية بعد تعليمات HALT .