Game Boy Rom Disassembler.
Membutuhkan Python v3.6 atau lebih baru.
File perakitan yang dihasilkan oleh MGBDIS dirancang untuk dirakit dengan RGBDS v0.6.0 atau lebih baru.
Bongkar rom:
./mgbdis.py some-game.gb
Output default adalah ke direktori disassembly . Anda dapat memverifikasi hasil pembongkaran dengan menjalankan make dan kemudian memeriksa file game.gb (atau game.gbc ) yang dibuat:
cd disassembly && make
Ada juga sejumlah opsi yang tersedia untuk mengontrol gaya pemformatan dan instruksi dari kode perakitan yang dihasilkan. Anda dapat melihat ini dengan menjalankan:
./mgbdis.py -h
File simbol memungkinkan Anda untuk menunjukkan di mana kode, data, tes, dan blok data gambar berada di ROM.
Instruksi CPU Game Boy (SM83) memiliki panjang yang berbeda, dan data dapat diselingi dengan kode dalam ROM, sehingga tidak mungkin untuk selalu mengidentifikasi secara akurat di mana instruksi dimulai dan berhenti. Mendefinisikan blok kode dalam file simbol dapat membantu menghindari masalah dengan MGBDI yang mencoba membongkar di tengah instruksi.
Jika Anda tidak memiliki file simbol, Anda dapat mencoba menghasilkan satu dengan Game Boy Emulator saya - Beaten Dying Moon. Anda dapat menggunakan demo web, atau ada bangunan yang tersedia untuk Windows dan MacOS. Ini dapat menghasilkan file simbol dengan definisi blok kode berdasarkan alamat instruksi yang sebenarnya telah dieksekusi saat Anda telah memainkan permainan, menghindari masalah perataan instruksi.
Untuk menggunakan file simbol dengan MGBDIS, itu harus ada di direktori yang sama dengan ROM dan memiliki nama yang sama, kecuali mengubah ekstensi menjadi .sym .
Semua nilai (kecuali untuk lebar gambar) harus dalam heksadesimal. Entri dimulai dengan nomor bank diikuti oleh alamat dalam memori.
Jenis blok dapat didefinisikan dengan menggunakan label .code , .data , .text , dan .image , diikuti oleh panjang blok dalam byte.
Menambahkan label untuk beberapa kode:
03:47f2 Read_Joypad_State
Menambahkan label untuk 512 byte data:
0d:4800 Level_Data
0d:4800 .data:200
Menambahkan label untuk 16 byte teks:
00:3d00 Character_Name
00:3d00 .text:10
Label .image Magic memungkinkan Anda untuk mendefinisikan blok 1 atau 2 bit per piksel data ubin dalam ROM. Gambar adalah output sebagai file PNG dalam direktori /gfx dari pembongkaran, dan dikonversi kembali ke data ubin 1BPP atau 2BPP oleh Makefile menggunakan RGBGFX. Jika label ditentukan pada alamat blok gambar maka itu akan digunakan untuk nama file PNG.
Panjang blok dalam byte harus kelipatan 16, karena setiap ubin membutuhkan 16 byte data gambar.
Lebar gambar dalam piksel dapat ditentukan sebagai bilangan desimal yang diawali dengan w . Nilai lebar harus kelipatan 8, dan kombinasi panjang blok dan lebar gambar harus menghasilkan gambar rectangluar tanpa ubin kosong. Lebar gambar default adalah 128 piksel, atau jika panjang blok menunjukkan jumlah ubin ganjil, maka gambar dengan satu baris ubin akan dihasilkan.
Palet adalah nilai byte berukuran yang memilih nuansa abu -abu untuk digunakan saat menghasilkan gambar. Menggunakan format yang sama dengan register BGP di 0xFF47 . Nilai dapat ditentukan dalam hexidecimal diawali dengan p . Palet default adalah E4 .
Standarnya adalah memperlakukannya sebagai 2 bit per piksel data ubin. Opsi 1bpp dapat dipasok untuk memperlakukan data sebagai 1 bit per piksel data ubin.
Menambahkan label untuk 1280 byte data ubin, dengan lebar 128 piksel dan palet 0xe4:
02:791a Title_Screen_Tile_Data
02:791a .image:500:w128,pe4
Gambar yang dihasilkan:
Contoh untuk data ubin 1bpp:
05:4000 Font
05:4000 .image:200:w128,1bpp
Gambar yang dihasilkan:
NOP setelah STOP dan HALT , sehingga Disassembler akan menghasilkan ini sebagai byte data jika instruksi tidak diikuti oleh NOP dalam ROM asli. Gunakan --disable-halt-nops dengan MGBDIS untuk menginstruksikan RGBD untuk menonaktifkan memasukkan instruksi NOP otomatis setelah instruksi HALT .