some cleanup of banner info handling, so bitbox 4k demo loads again
This commit is contained in:
parent
e40600564f
commit
7e1ec9f583
|
@ -1,14 +1,16 @@
|
||||||
0.9.6 -> 0.9.7 (r3493-r3xxx)
|
0.9.6 -> 0.9.7 (r3493-r3654-r3xxx)
|
||||||
|
|
||||||
General/Core:
|
General/Core:
|
||||||
bug: return Z1 and Z2 from TSC (fixes some touch logic)
|
bug: return Z1 and Z2 from TSC (fixes some touch logic)
|
||||||
bug: fix a ton of old, broken cpu opcodes and CP15 logic
|
bug: fix a ton of old, broken cpu opcodes and CP15 logic
|
||||||
|
bug: gba slot save type detection improved
|
||||||
enh: substantial improvements to wifi emulation
|
enh: substantial improvements to wifi emulation
|
||||||
enh: more realistic exception handling
|
enh: more realistic exception handling
|
||||||
enh: piano controller emulation
|
enh: piano controller emulation
|
||||||
|
|
||||||
Graphics:
|
Graphics:
|
||||||
bug: edge marking colors were wrong
|
bug: edge marking colors were wrong
|
||||||
|
bug: handle some "invalid" vram configurations correctly
|
||||||
|
|
||||||
Windows:
|
Windows:
|
||||||
|
|
||||||
|
|
|
@ -829,8 +829,6 @@ static inline void MMU_VRAMmapControl(u8 block, u8 VRAMBankCnt)
|
||||||
|
|
||||||
|
|
||||||
void MMU_Init(void) {
|
void MMU_Init(void) {
|
||||||
int i;
|
|
||||||
|
|
||||||
LOG("MMU init\n");
|
LOG("MMU init\n");
|
||||||
|
|
||||||
memset(&MMU, 0, sizeof(MMU_struct));
|
memset(&MMU, 0, sizeof(MMU_struct));
|
||||||
|
@ -838,13 +836,16 @@ void MMU_Init(void) {
|
||||||
MMU.CART_ROM = MMU.UNUSED_RAM;
|
MMU.CART_ROM = MMU.UNUSED_RAM;
|
||||||
MMU.CART_ROM_MASK = 3;
|
MMU.CART_ROM_MASK = 3;
|
||||||
|
|
||||||
for(i = 0x80; i<0xA0; ++i)
|
//zero 01-jun-2010 - this makes no sense at all. delete me later
|
||||||
{
|
//for(i = 0x80; i<0xA0; ++i)
|
||||||
MMU_struct::MMU_MEM[0][i] = MMU.CART_ROM;
|
//{
|
||||||
MMU_struct::MMU_MEM[1][i] = MMU.CART_ROM;
|
// MMU_struct::MMU_MEM[0][i] = MMU.CART_ROM;
|
||||||
}
|
// MMU_struct::MMU_MEM[1][i] = MMU.CART_ROM;
|
||||||
|
//}
|
||||||
|
|
||||||
MMU.DTCMRegion = 0x027C0000;
|
//MMU.DTCMRegion = 0x027C0000;
|
||||||
|
//even though apps may change dtcm immediately upon startup, this is the correct hardware starting value:
|
||||||
|
MMU.DTCMRegion = 0x08000000;
|
||||||
MMU.ITCMRegion = 0x00000000;
|
MMU.ITCMRegion = 0x00000000;
|
||||||
|
|
||||||
IPC_FIFOinit(ARMCPU_ARM9);
|
IPC_FIFOinit(ARMCPU_ARM9);
|
||||||
|
|
|
@ -288,6 +288,40 @@ static u32 ones32(u32 x)
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
RomBanner::RomBanner(bool defaultInit)
|
||||||
|
{
|
||||||
|
if(!defaultInit) return;
|
||||||
|
version = 1; //Version (0001h)
|
||||||
|
crc16 = 0; //CRC16 across entries 020h..83Fh
|
||||||
|
memset(reserved,0,sizeof(reserved));
|
||||||
|
memset(bitmap,0,sizeof(bitmap));
|
||||||
|
memset(palette,0,sizeof(palette));
|
||||||
|
memset(titles,0,sizeof(titles));
|
||||||
|
for(int i=0;i<NUM_TITLES;i++)
|
||||||
|
wcscpy(titles[i],L"None");
|
||||||
|
memset(end0xFF,0,sizeof(end0xFF));
|
||||||
|
u16 palette[0x10]; //Icon Palette (16 colors, 16bit, range 0000h-7FFFh) (Color 0 is transparent, so the 1st palette entry is ignored)
|
||||||
|
}
|
||||||
|
|
||||||
|
bool GameInfo::hasRomBanner()
|
||||||
|
{
|
||||||
|
if(header.IconOff + sizeof(RomBanner) > romsize)
|
||||||
|
return false;
|
||||||
|
else return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
const RomBanner& GameInfo::getRomBanner()
|
||||||
|
{
|
||||||
|
//we may not have a valid banner. return a default one
|
||||||
|
if(!hasRomBanner())
|
||||||
|
{
|
||||||
|
static RomBanner defaultBanner(true);
|
||||||
|
return defaultBanner;
|
||||||
|
}
|
||||||
|
|
||||||
|
return *(RomBanner*)(romdata+header.IconOff);
|
||||||
|
}
|
||||||
|
|
||||||
void GameInfo::populate()
|
void GameInfo::populate()
|
||||||
{
|
{
|
||||||
const char *regions[] = { "JPFSEDIRKH",
|
const char *regions[] = { "JPFSEDIRKH",
|
||||||
|
@ -310,16 +344,17 @@ void GameInfo::populate()
|
||||||
|
|
||||||
memset(ROMserial, 0, sizeof(ROMserial));
|
memset(ROMserial, 0, sizeof(ROMserial));
|
||||||
memset(ROMname, 0, sizeof(ROMname));
|
memset(ROMname, 0, sizeof(ROMname));
|
||||||
memset(ROMfullName, 0, sizeof(ROMfullName));
|
|
||||||
|
|
||||||
if (
|
if (
|
||||||
// ??? in all Homebrews game title have is 2E0000EA
|
//Option 1. - look for this instruction in the game title
|
||||||
//(
|
//(did this ever work?)
|
||||||
//(header->gameTile[0] == 0x2E) &&
|
//(header->gameTile[0] == 0x2E) &&
|
||||||
//(header->gameTile[1] == 0x00) &&
|
//(header->gameTile[1] == 0x00) &&
|
||||||
//(header->gameTile[2] == 0x00) &&
|
//(header->gameTile[2] == 0x00) &&
|
||||||
//(header->gameTile[3] == 0xEA)
|
//(header->gameTile[3] == 0xEA)
|
||||||
//) &&
|
//) &&
|
||||||
|
//option 2. - look for gamecode #### (default for ndstool)
|
||||||
|
//or an invalid gamecode
|
||||||
(
|
(
|
||||||
((header.gameCode[0] == 0x23) &&
|
((header.gameCode[0] == 0x23) &&
|
||||||
(header.gameCode[1] == 0x23) &&
|
(header.gameCode[1] == 0x23) &&
|
||||||
|
@ -332,6 +367,7 @@ void GameInfo::populate()
|
||||||
header.makerCode == 0x0
|
header.makerCode == 0x0
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
|
//we can't really make a serial for a homebrew game that hasnt set a game code
|
||||||
strcpy(ROMserial, "Homebrew");
|
strcpy(ROMserial, "Homebrew");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -344,18 +380,24 @@ void GameInfo::populate()
|
||||||
strcat(ROMserial, regions[region]);
|
strcat(ROMserial, regions[region]);
|
||||||
else
|
else
|
||||||
strcat(ROMserial, "Unknown");
|
strcat(ROMserial, "Unknown");
|
||||||
|
}
|
||||||
|
|
||||||
|
//rom name is probably set even in homebrew
|
||||||
memset(ROMname, 0, sizeof(ROMname));
|
memset(ROMname, 0, sizeof(ROMname));
|
||||||
memcpy(ROMname, header.gameTile, 12);
|
memcpy(ROMname, header.gameTile, 12);
|
||||||
trim(ROMname);
|
trim(ROMname,20);
|
||||||
|
|
||||||
|
/*if(header.IconOff < romsize)
|
||||||
|
{
|
||||||
u8 num = (T1ReadByte((u8*)romdata, header.IconOff) == 1)?6:7;
|
u8 num = (T1ReadByte((u8*)romdata, header.IconOff) == 1)?6:7;
|
||||||
for (int i = 0; i < num; i++)
|
for (int i = 0; i < num; i++)
|
||||||
{
|
{
|
||||||
wcstombs(ROMfullName[i], (wchar_t *)(romdata+header.IconOff+0x240+(i*0x100)), 0x100);
|
wcstombs(ROMfullName[i], (wchar_t *)(romdata+header.IconOff+0x240+(i*0x100)), 0x100);
|
||||||
trim(ROMfullName[i]);
|
trim(ROMfullName[i]);
|
||||||
}
|
}
|
||||||
|
}*/
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
#ifdef _WINDOWS
|
#ifdef _WINDOWS
|
||||||
|
|
||||||
|
|
|
@ -271,6 +271,31 @@ void NDS_DeInit(void);
|
||||||
BOOL NDS_SetROM(u8 * rom, u32 mask);
|
BOOL NDS_SetROM(u8 * rom, u32 mask);
|
||||||
NDS_header * NDS_getROMHeader(void);
|
NDS_header * NDS_getROMHeader(void);
|
||||||
|
|
||||||
|
struct RomBanner
|
||||||
|
{
|
||||||
|
RomBanner(bool defaultInit);
|
||||||
|
u16 version; //Version (0001h)
|
||||||
|
u16 crc16; //CRC16 across entries 020h..83Fh
|
||||||
|
u8 reserved[0x1C]; //Reserved (zero-filled)
|
||||||
|
u8 bitmap[0x200]; //Icon Bitmap (32x32 pix) (4x4 tiles, each 4x8 bytes, 4bit depth)
|
||||||
|
u16 palette[0x10]; //Icon Palette (16 colors, 16bit, range 0000h-7FFFh) (Color 0 is transparent, so the 1st palette entry is ignored)
|
||||||
|
enum { NUM_TITLES = 6 };
|
||||||
|
union {
|
||||||
|
struct {
|
||||||
|
wchar_t title_jp[0x80]; //Title 0 Japanese (128 characters, 16bit Unicode)
|
||||||
|
wchar_t title_en[0x80]; //Title 1 English ("")
|
||||||
|
wchar_t title_fr[0x80]; //Title 2 French ("")
|
||||||
|
wchar_t title_de[0x80]; //Title 3 German ("")
|
||||||
|
wchar_t title_it[0x80]; //Title 4 Italian ("")
|
||||||
|
wchar_t title_es[0x80]; //Title 5 Spanish ("")
|
||||||
|
};
|
||||||
|
wchar_t titles[NUM_TITLES][0x80];
|
||||||
|
};
|
||||||
|
u8 end0xFF[0x1C0];
|
||||||
|
//840h ? (Maybe newer/chinese firmware do also support chinese title?)
|
||||||
|
//840h - End of Icon/Title structure (next 1C0h bytes usually FFh-filled)
|
||||||
|
};
|
||||||
|
|
||||||
struct GameInfo
|
struct GameInfo
|
||||||
{
|
{
|
||||||
GameInfo()
|
GameInfo()
|
||||||
|
@ -312,12 +337,14 @@ struct GameInfo
|
||||||
NDS_header header;
|
NDS_header header;
|
||||||
char ROMserial[20];
|
char ROMserial[20];
|
||||||
char ROMname[20];
|
char ROMname[20];
|
||||||
char ROMfullName[7][0x100];
|
//char ROMfullName[7][0x100];
|
||||||
void populate();
|
void populate();
|
||||||
char* romdata;
|
char* romdata;
|
||||||
u32 romsize;
|
u32 romsize;
|
||||||
u32 allocatedSize;
|
u32 allocatedSize;
|
||||||
u32 mask;
|
u32 mask;
|
||||||
|
const RomBanner& getRomBanner();
|
||||||
|
bool hasRomBanner();
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef struct TSCalInfo
|
typedef struct TSCalInfo
|
||||||
|
|
|
@ -27,6 +27,7 @@
|
||||||
#include "mem.h"
|
#include "mem.h"
|
||||||
#include "MMU.h"
|
#include "MMU.h"
|
||||||
#include "debug.h"
|
#include "debug.h"
|
||||||
|
#include "utils/xstring.h"
|
||||||
|
|
||||||
CHEATS *cheats = NULL;
|
CHEATS *cheats = NULL;
|
||||||
CHEATSEARCH *cheatSearch = NULL;
|
CHEATSEARCH *cheatSearch = NULL;
|
||||||
|
@ -543,7 +544,9 @@ BOOL CHEATS::save()
|
||||||
if (flist)
|
if (flist)
|
||||||
{
|
{
|
||||||
fprintf(flist, "; DeSmuME cheats file. VERSION %i.%03i\n", CHEAT_VERSION_MAJOR, CHEAT_VERSION_MINOR);
|
fprintf(flist, "; DeSmuME cheats file. VERSION %i.%03i\n", CHEAT_VERSION_MAJOR, CHEAT_VERSION_MINOR);
|
||||||
strcpy(buf, gameInfo.ROMfullName[0]);
|
std::wstring wtemp = (std::wstring)gameInfo.getRomBanner().titles[1];
|
||||||
|
std::string temp = wcstombs(wtemp);
|
||||||
|
strcpy(buf, temp.c_str());
|
||||||
trim(buf);
|
trim(buf);
|
||||||
removeSpecialChars(buf);
|
removeSpecialChars(buf);
|
||||||
fprintf(flist, "Name=%s\n", buf);
|
fprintf(flist, "Name=%s\n", buf);
|
||||||
|
|
|
@ -37,13 +37,16 @@ const u8 logo_data[156] = {
|
||||||
0x78,0x00,0x90,0xCB,0x88,0x11,0x3A,0x94,0x65,0xC0,0x7C,0x63,0x87,0xF0,0x3C,0xAF,
|
0x78,0x00,0x90,0xCB,0x88,0x11,0x3A,0x94,0x65,0xC0,0x7C,0x63,0x87,0xF0,0x3C,0xAF,
|
||||||
0xD6,0x25,0xE4,0x8B,0x38,0x0A,0xAC,0x72,0x21,0xD4,0xF8,0x07};
|
0xD6,0x25,0xE4,0x8B,0x38,0x0A,0xAC,0x72,0x21,0xD4,0xF8,0x07};
|
||||||
|
|
||||||
char *trim(char *s)
|
char *trim(char *s, int len)
|
||||||
{
|
{
|
||||||
char *ptr = NULL;
|
char *ptr = NULL;
|
||||||
if (!s) return NULL;
|
if (!s) return NULL;
|
||||||
if (!*s) return s;
|
if (!*s) return s;
|
||||||
|
|
||||||
for (ptr = s + strlen(s) - 1; (ptr >= s) && isspace(*ptr); ptr--);
|
if(len==-1)
|
||||||
|
ptr = s + strlen(s) - 1;
|
||||||
|
else ptr = s+len - 1;
|
||||||
|
for (; (ptr >= s) && (!*ptr || isspace((u8)*ptr)) ; ptr--);
|
||||||
ptr[1] = '\0';
|
ptr[1] = '\0';
|
||||||
return s;
|
return s;
|
||||||
}
|
}
|
||||||
|
|
|
@ -83,7 +83,7 @@ char *intToBin(T val)
|
||||||
return strdup(buf);
|
return strdup(buf);
|
||||||
}
|
}
|
||||||
|
|
||||||
extern char *trim(char *s);
|
extern char *trim(char *s, int len=-1);
|
||||||
extern char *removeSpecialChars(char *s);
|
extern char *removeSpecialChars(char *s);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -580,10 +580,6 @@
|
||||||
<ClInclude Include="..\rtc.h" />
|
<ClInclude Include="..\rtc.h" />
|
||||||
<ClInclude Include="..\saves.h" />
|
<ClInclude Include="..\saves.h" />
|
||||||
<ClInclude Include="..\shaders.h" />
|
<ClInclude Include="..\shaders.h" />
|
||||||
<ClInclude Include="..\softrender.h" />
|
|
||||||
<ClInclude Include="..\softrender_config.h" />
|
|
||||||
<ClInclude Include="..\softrender_desmumefont.h" />
|
|
||||||
<ClInclude Include="..\softrender_v3sysfont.h" />
|
|
||||||
<ClInclude Include="..\SPU.h" />
|
<ClInclude Include="..\SPU.h" />
|
||||||
<ClInclude Include="..\texcache.h" />
|
<ClInclude Include="..\texcache.h" />
|
||||||
<ClInclude Include="..\thumb_instructions.h" />
|
<ClInclude Include="..\thumb_instructions.h" />
|
||||||
|
@ -624,6 +620,9 @@
|
||||||
<ClInclude Include="colorctrl.h" />
|
<ClInclude Include="colorctrl.h" />
|
||||||
<ClInclude Include="console.h" />
|
<ClInclude Include="console.h" />
|
||||||
<ClInclude Include="CWindow.h" />
|
<ClInclude Include="CWindow.h" />
|
||||||
|
<ClInclude Include="filter\hq2x.h" />
|
||||||
|
<ClInclude Include="filter\interp.h" />
|
||||||
|
<ClInclude Include="filter\lq2x.h" />
|
||||||
<ClInclude Include="FirmConfig.h" />
|
<ClInclude Include="FirmConfig.h" />
|
||||||
<ClInclude Include="gbaslot_config.h" />
|
<ClInclude Include="gbaslot_config.h" />
|
||||||
<ClInclude Include="hotkey.h" />
|
<ClInclude Include="hotkey.h" />
|
||||||
|
|
|
@ -84,52 +84,33 @@ LRESULT GInfo_Paint(HWND hDlg, WPARAM wParam, LPARAM lParam)
|
||||||
wchar_t *utf16text;
|
wchar_t *utf16text;
|
||||||
u32 val;
|
u32 val;
|
||||||
|
|
||||||
|
|
||||||
hdc = BeginPaint(hDlg, &ps);
|
hdc = BeginPaint(hDlg, &ps);
|
||||||
|
|
||||||
icontitleOffset = T1ReadLong(MMU.CART_ROM, 0x68);
|
const RomBanner& banner = gameInfo.getRomBanner();
|
||||||
|
|
||||||
if(icontitleOffset >= 0x8000)
|
sprintf(text, "%ws", banner.titles[win_fw_config.language]);
|
||||||
{
|
|
||||||
utf16text = (wchar_t*)(MMU.CART_ROM + icontitleOffset + 0x240 + (0x100 * win_fw_config.language));
|
|
||||||
sprintf(text, "%ws", utf16text);
|
|
||||||
SetWindowText(GetDlgItem(hDlg, IDC_GI_TITLE), text);
|
SetWindowText(GetDlgItem(hDlg, IDC_GI_TITLE), text);
|
||||||
|
|
||||||
utf16text = (wchar_t*)(MMU.CART_ROM + icontitleOffset + 0x240);
|
sprintf(text, "%ws", banner.titles[0]);
|
||||||
sprintf(text, "%ws", utf16text);
|
|
||||||
SetWindowText(GetDlgItem(hDlg, IDC_GI_TITLEJP), text);
|
SetWindowText(GetDlgItem(hDlg, IDC_GI_TITLEJP), text);
|
||||||
|
|
||||||
utf16text = (wchar_t*)(MMU.CART_ROM + icontitleOffset + 0x340);
|
sprintf(text, "%ws", banner.titles[1]);
|
||||||
sprintf(text, "%ws", utf16text);
|
|
||||||
SetWindowText(GetDlgItem(hDlg, IDC_GI_TITLEEN), text);
|
SetWindowText(GetDlgItem(hDlg, IDC_GI_TITLEEN), text);
|
||||||
|
|
||||||
utf16text = (wchar_t*)(MMU.CART_ROM + icontitleOffset + 0x440);
|
sprintf(text, "%ws", banner.titles[2]);
|
||||||
sprintf(text, "%ws", utf16text);
|
|
||||||
SetWindowText(GetDlgItem(hDlg, IDC_GI_TITLEFR), text);
|
SetWindowText(GetDlgItem(hDlg, IDC_GI_TITLEFR), text);
|
||||||
|
|
||||||
utf16text = (wchar_t*)(MMU.CART_ROM + icontitleOffset + 0x540);
|
sprintf(text, "%ws", banner.titles[3]);
|
||||||
sprintf(text, "%ws", utf16text);
|
|
||||||
SetWindowText(GetDlgItem(hDlg, IDC_GI_TITLEGE), text);
|
SetWindowText(GetDlgItem(hDlg, IDC_GI_TITLEGE), text);
|
||||||
|
|
||||||
utf16text = (wchar_t*)(MMU.CART_ROM + icontitleOffset + 0x640);
|
sprintf(text, "%ws", banner.titles[4]);
|
||||||
sprintf(text, "%ws", utf16text);
|
|
||||||
SetWindowText(GetDlgItem(hDlg, IDC_GI_TITLEIT), text);
|
SetWindowText(GetDlgItem(hDlg, IDC_GI_TITLEIT), text);
|
||||||
|
|
||||||
utf16text = (wchar_t*)(MMU.CART_ROM + icontitleOffset + 0x740);
|
sprintf(text, "%ws", banner.titles[5]);
|
||||||
sprintf(text, "%ws", utf16text);
|
|
||||||
SetWindowText(GetDlgItem(hDlg, IDC_GI_TITLESP), text);
|
SetWindowText(GetDlgItem(hDlg, IDC_GI_TITLESP), text);
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
SetWindowText(GetDlgItem(hDlg, IDC_GI_TITLE), "\nNo title\n");
|
|
||||||
|
|
||||||
SetWindowText(GetDlgItem(hDlg, IDC_GI_TITLEJP), "None");
|
|
||||||
SetWindowText(GetDlgItem(hDlg, IDC_GI_TITLEEN), "None");
|
|
||||||
SetWindowText(GetDlgItem(hDlg, IDC_GI_TITLEFR), "None");
|
|
||||||
SetWindowText(GetDlgItem(hDlg, IDC_GI_TITLEGE), "None");
|
|
||||||
SetWindowText(GetDlgItem(hDlg, IDC_GI_TITLEIT), "None");
|
|
||||||
SetWindowText(GetDlgItem(hDlg, IDC_GI_TITLESP), "None");
|
|
||||||
}
|
|
||||||
|
|
||||||
|
//TODO - pull this from the header, not straight out of the rom (yuck!)
|
||||||
|
|
||||||
memcpy(text, MMU.CART_ROM, 12);
|
memcpy(text, MMU.CART_ROM, 12);
|
||||||
text[12] = '\0';
|
text[12] = '\0';
|
||||||
|
@ -197,7 +178,7 @@ LRESULT GInfo_Paint(HWND hDlg, WPARAM wParam, LPARAM lParam)
|
||||||
sprintf(text, "%i bytes", val);
|
sprintf(text, "%i bytes", val);
|
||||||
SetWindowText(GetDlgItem(hDlg, IDC_GI_FATSIZE), text);
|
SetWindowText(GetDlgItem(hDlg, IDC_GI_FATSIZE), text);
|
||||||
|
|
||||||
|
icontitleOffset = T1ReadLong(MMU.CART_ROM, 0x68);
|
||||||
sprintf(text, "0x%08X", icontitleOffset);
|
sprintf(text, "0x%08X", icontitleOffset);
|
||||||
SetWindowText(GetDlgItem(hDlg, IDC_GI_ICONTITLEOFS), text);
|
SetWindowText(GetDlgItem(hDlg, IDC_GI_ICONTITLEOFS), text);
|
||||||
|
|
||||||
|
@ -278,9 +259,9 @@ LRESULT GInfo_IconBoxPaint(HWND hCtl, WPARAM wParam, LPARAM lParam)
|
||||||
bmph.bV4Width = 32;
|
bmph.bV4Width = 32;
|
||||||
bmph.bV4Height = -32;
|
bmph.bV4Height = -32;
|
||||||
|
|
||||||
icontitleOffset = T1ReadLong(MMU.CART_ROM, 0x68);
|
const RomBanner& banner = gameInfo.getRomBanner();
|
||||||
|
|
||||||
if(icontitleOffset >= 0x8000)
|
if(gameInfo.hasRomBanner())
|
||||||
{
|
{
|
||||||
for(y = 0; y < 32; y++)
|
for(y = 0; y < 32; y++)
|
||||||
{
|
{
|
||||||
|
@ -291,14 +272,14 @@ LRESULT GInfo_IconBoxPaint(HWND hCtl, WPARAM wParam, LPARAM lParam)
|
||||||
int tiley = (y % 8);
|
int tiley = (y % 8);
|
||||||
int mapoffset = ((tilenum * 64) + (tiley * 8) + tilex);
|
int mapoffset = ((tilenum * 64) + (tiley * 8) + tilex);
|
||||||
|
|
||||||
u8 val = T1ReadByte(MMU.CART_ROM, (icontitleOffset + 0x20 + (mapoffset>>1)));
|
u8 val = banner.bitmap[(mapoffset>>1)];
|
||||||
|
|
||||||
if(mapoffset & 1)
|
if(mapoffset & 1)
|
||||||
val = ((val >> 4) & 0xF);
|
val = ((val >> 4) & 0xF);
|
||||||
else
|
else
|
||||||
val = (val & 0xF);
|
val = (val & 0xF);
|
||||||
|
|
||||||
icon[(y * 32) + x] = T1ReadWord(MMU.CART_ROM, (icontitleOffset + 0x220 + (val<<1)));
|
icon[(y * 32) + x] = banner.palette[val];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue