rizin/libr/bin/format/nin/nin.h
condret 0a8fd8b931 Merge condret's GameBoy pull request
- Update analysis
- Add p2 (2bpp print command)
- Insert more auto comments for gb roms
- Delete mbc
- Handle gb-halt as cjmp (correct in most situations)
- Update gameboy register profile
- Add symbols for hard-interrupt-handlers
2014-02-10 17:02:43 +01:00

164 lines
2.8 KiB
C

/* radare - GPL3 - 2013 condret@runas-racer.com */
#include <r_types.h>
#include <string.h>
enum{
GB_SGB = 3
,GB_GBC = 0x80
};
enum{
GB_ROM
,GB_ROM_MBC1
,GB_ROM_MBC1_RAM
,GB_ROM_MBC1_RAM_BAT
,GB_ROM_MBC2 = 0x5
,GB_ROM_MBC2_BAT
,GB_ROM_RAM = 0x8
,GB_ROM_RAM_BAT
,GB_ROM_MMM0 = 0xb
,GB_ROM_MMM0_SRAM
,GB_ROM_MMM0_SRAM_BAT
,GB_ROM_MBC3_TIMER_BAT = 0xf
,GB_ROM_MBC3_TIMER_RAM_BAT
,GB_ROM_MBC3
,GB_ROM_MBC3_RAM
,GB_ROM_MBC3_RAM_BAT
,GB_ROM_MBC5 = 0x19
,GB_ROM_MBC5_RAM
,GB_ROM_MBC5_RAM_BAT
,GB_ROM_MBC5_RMBL
,GB_ROM_MBC5_RMBL_SRAM
,GB_ROM_MBC5_RMBL_SRAM_BAT
,GB_CAM
,GB_TAMA5 = 0xfd
,GB_HUC3
,GB_HUC1
};
enum{
GB_ROM_BANKS_2
,GB_ROM_BANKS_4
,GB_ROM_BANKS_8
,GB_ROM_BANKS_16
,GB_ROM_BANKS_32
,GB_ROM_BANKS_64
,GB_ROM_BANKS_128
,GB_ROM_BANKS_72 = 0x52
,GB_ROM_BANKS_80
,GB_ROM_BANKS_96
};
enum{
GB_NO_RAM
,GB_RAM_2
,GB_RAM_8
,GB_RAM_32
,GB_RAM_128
};
const ut8 lic[]={
0xce, 0xed, 0x66, 0x66, 0xcc, 0x0d, 0x00, 0x0b, 0x03, 0x73, 0x00,
0x83, 0x00, 0x0c, 0x00, 0x0d, 0x00, 0x08, 0x11, 0x1f, 0x88, 0x89,
0x00, 0x0e, 0xdc, 0xcc, 0x6e, 0xe6, 0xdd, 0xdd, 0xd9, 0x99, 0xbb,
0xbb, 0x67, 0x63, 0x6e, 0x0e, 0xec, 0xcc, 0xdd, 0xdc, 0x99, 0x9f,
0xbb, 0xb9, 0x33, 0x3e};
const char *gb_card_type_str[]={
"ROM",
"ROM+MBC1",
"ROM+MBC1+RAM",
"ROM+MBC1+RAM+BAT",
"XXX",
"ROM+MBC2",
"ROM+MBC2+BAT",
"XXX",
"ROM+RAM",
"ROM+RAM+BAT",
"XXX",
"ROM+MMM0",
"ROM+MMM0+SRAM",
"ROM+MMM0+SRAM+BAT",
"XXX",
"ROM+MBC3+TIMER+BAT",
"ROM+MBC3+TIMER+RAM+BAT",
"ROM+MBC3",
"ROM+MBC3+RAM",
"ROM+MBC3+RAM+BAT",
"TAMA5",
"HUC3",
"HUC1",
"XXX", //mbc4?
"XXX",
"ROM+MBC5",
"ROM+MBC5+RAM",
"ROM+MBC5+RAM+BAT",
"ROM+MBC5+RUMBLE",
"ROM+MBC5+RUMBLE+SRAM",
"ROM+MBC5+RUMBLE+SRAM+BAT",
"CAM"
};
void gb_add_cardtype(char *type, ut8 cardcode){
strcat (type,"\ncard\t");
switch (cardcode){
case GB_TAMA5:
case GB_HUC3:
case GB_HUC1:
strcat (type,gb_card_type_str[cardcode-240]);
break;
case 0x15:
case 0x16:
case 0x17:
strcat (type,"XXX");
break;
default:
if (cardcode>GB_CAM) {
strcat (type,"XXX");
return;
}
strcat (type,gb_card_type_str[cardcode]);
break;
}
}
int gb_get_rombanks(ut8 id){
switch (id){
case GB_ROM_BANKS_2:
return 2;
case GB_ROM_BANKS_4:
return 4;
case GB_ROM_BANKS_8:
return 8;
case GB_ROM_BANKS_16:
return 16;
case GB_ROM_BANKS_32:
return 32;
case GB_ROM_BANKS_64:
return 64;
case GB_ROM_BANKS_128:
return 128;
case GB_ROM_BANKS_72:
return 72;
case GB_ROM_BANKS_80:
return 80;
case GB_ROM_BANKS_96:
return 96;
}
return 2;
}
void gb_get_gbtype(char *type, ut8 foo, ut8 bar){
if (foo==GB_SGB) {
strcpy (type, "SuperGameboy-Rom");
} else {
if (bar==GB_GBC) {
strcpy (type, "GameboyColor-Rom");
} else {
strcpy (type, "Gameboy-Rom");
}
}
}