rlm@1: // RomInfo.cpp : implementation file rlm@1: // rlm@1: rlm@1: #include "stdafx.h" rlm@1: #include "resource.h" rlm@1: #include "RomInfo.h" rlm@1: #include "WinResUtil.h" rlm@1: rlm@1: extern int32 gbRomSize; rlm@1: rlm@1: struct WinGBACompanyName rlm@1: { rlm@1: LPCTSTR code; rlm@1: LPCTSTR name; rlm@1: }; rlm@1: rlm@1: static WinGBACompanyName winGBARomInfoCompanies[] = { rlm@1: { "01", "Nintendo" }, rlm@1: { "02", "Rocket Games" }, rlm@1: { "08", "Capcom" }, rlm@1: { "09", "Hot B Co." }, rlm@1: { "0A", "Jaleco" }, rlm@1: { "0B", "Coconuts Japan" }, rlm@1: { "0C", "Coconuts Japan/G.X.Media" }, rlm@1: { "0H", "Starfish" }, rlm@1: { "0L", "Warashi Inc." }, rlm@1: { "0N", "Nowpro" }, rlm@1: { "0P", "Game Village" }, rlm@1: { "13", "Electronic Arts Japan" }, rlm@1: { "18", "Hudson Soft Japan" }, rlm@1: { "19", "S.C.P." }, rlm@1: { "1A", "Yonoman" }, rlm@1: { "1G", "SMDE" }, rlm@1: { "1P", "Creatures Inc." }, rlm@1: { "1Q", "TDK Deep Impresion" }, rlm@1: { "20", "Destination Software" }, rlm@1: { "22", "VR 1 Japan" }, rlm@1: { "25", "San-X" }, rlm@1: { "28", "Kemco Japan" }, rlm@1: { "29", "Seta" }, rlm@1: { "2H", "Ubisoft Japan" }, rlm@1: { "2K", "NEC InterChannel" }, rlm@1: { "2L", "Tam" }, rlm@1: { "2M", "Jordan" }, rlm@1: { "2N", "Smilesoft" }, rlm@1: { "2Q", "Mediakite" }, rlm@1: { "36", "Codemasters" }, rlm@1: { "37", "GAGA Communications" }, rlm@1: { "38", "Laguna" }, rlm@1: { "39", "Telstar Fun and Games" }, rlm@1: { "41", "Ubi Soft Entertainment" }, rlm@1: { "42", "Sunsoft" }, rlm@1: { "47", "Spectrum Holobyte" }, rlm@1: { "49", "IREM" }, rlm@1: { "4D", "Malibu Games" }, rlm@1: { "4F", "Eidos/U.S. Gold" }, rlm@1: { "4J", "Fox Interactive" }, rlm@1: { "4K", "Time Warner Interactive" }, rlm@1: { "4Q", "Disney" }, rlm@1: { "4S", "Black Pearl" }, rlm@1: { "4X", "GT Interactive" }, rlm@1: { "4Y", "RARE" }, rlm@1: { "4Z", "Crave Entertainment" }, rlm@1: { "50", "Absolute Entertainment" }, rlm@1: { "51", "Acclaim" }, rlm@1: { "52", "Activision" }, rlm@1: { "53", "American Sammy Corp." }, rlm@1: { "54", "Take 2 Interactive" }, rlm@1: { "55", "Hi Tech" }, rlm@1: { "56", "LJN LTD." }, rlm@1: { "58", "Mattel" }, rlm@1: { "5A", "Mindscape/Red Orb Ent." }, rlm@1: { "5C", "Taxan" }, rlm@1: { "5D", "Midway" }, rlm@1: { "5F", "American Softworks" }, rlm@1: { "5G", "Majesco Sales Inc" }, rlm@1: { "5H", "3DO" }, rlm@1: { "5K", "Hasbro" }, rlm@1: { "5L", "NewKidCo" }, rlm@1: { "5M", "Telegames" }, rlm@1: { "5N", "Metro3D" }, rlm@1: { "5P", "Vatical Entertainment" }, rlm@1: { "5Q", "LEGO Media" }, rlm@1: { "5S", "Xicat Interactive" }, rlm@1: { "5T", "Cryo Interactive" }, rlm@1: { "5W", "Red Storm Ent./BKN Ent." }, rlm@1: { "5X", "Microids" }, rlm@1: { "5Z", "Conspiracy Entertainment Corp." }, rlm@1: { "60", "Titus Interactive Studios" }, rlm@1: { "61", "Virgin Interactive" }, rlm@1: { "62", "Maxis" }, rlm@1: { "64", "LucasArts Entertainment" }, rlm@1: { "67", "Ocean" }, rlm@1: { "69", "Electronic Arts" }, rlm@1: { "6E", "Elite Systems Ltd." }, rlm@1: { "6F", "Electro Brain" }, rlm@1: { "6G", "The Learning Company" }, rlm@1: { "6H", "BBC" }, rlm@1: { "6J", "Software 2000" }, rlm@1: { "6L", "BAM! Entertainment" }, rlm@1: { "6M", "Studio 3" }, rlm@1: { "6Q", "Classified Games" }, rlm@1: { "6S", "TDK Mediactive" }, rlm@1: { "6U", "DreamCatcher" }, rlm@1: { "6V", "JoWood Productions" }, rlm@1: { "6W", "SEGA" }, rlm@1: { "6X", "Wannado Edition" }, rlm@1: { "6Y", "LSP" }, rlm@1: { "6Z", "ITE Media" }, rlm@1: { "70", "Infogrames" }, rlm@1: { "71", "Interplay" }, rlm@1: { "72", "JVC Musical Industries Inc" }, rlm@1: { "73", "Parker Brothers" }, rlm@1: { "75", "SCI" }, rlm@1: { "78", "THQ" }, rlm@1: { "79", "Accolade" }, rlm@1: { "7A", "Triffix Ent. Inc." }, rlm@1: { "7C", "Microprose Software" }, rlm@1: { "7D", "Universal Interactive Studios" }, rlm@1: { "7F", "Kemco" }, rlm@1: { "7G", "Rage Software" }, rlm@1: { "7H", "Encore" }, rlm@1: { "7J", "Zoo" }, rlm@1: { "7K", "BVM" }, rlm@1: { "7L", "Simon & Schuster Interactive" }, rlm@1: { "7M", "Asmik Ace Entertainment Inc./AIA" }, rlm@1: { "7N", "Empire Interactive" }, rlm@1: { "7Q", "Jester Interactive" }, rlm@1: { "7T", "Scholastic" }, rlm@1: { "7U", "Ignition Entertainment" }, rlm@1: { "7W", "Stadlbauer" }, rlm@1: { "80", "Misawa" }, rlm@1: { "83", "LOZC" }, rlm@1: { "8B", "Bulletproof Software" }, rlm@1: { "8C", "Vic Tokai Inc." }, rlm@1: { "8J", "General Entertainment" }, rlm@1: { "8N", "Success" }, rlm@1: { "8P", "SEGA Japan" }, rlm@1: { "91", "Chun Soft" }, rlm@1: { "92", "Video System" }, rlm@1: { "93", "BEC" }, rlm@1: { "96", "Yonezawa/S'pal" }, rlm@1: { "97", "Kaneko" }, rlm@1: { "99", "Victor Interactive Software" }, rlm@1: { "9A", "Nichibutsu/Nihon Bussan" }, rlm@1: { "9B", "Tecmo" }, rlm@1: { "9C", "Imagineer" }, rlm@1: { "9F", "Nova" }, rlm@1: { "9H", "Bottom Up" }, rlm@1: { "9L", "Hasbro Japan" }, rlm@1: { "9N", "Marvelous Entertainment" }, rlm@1: { "9P", "Keynet Inc." }, rlm@1: { "9Q", "Hands-On Entertainment" }, rlm@1: { "A0", "Telenet" }, rlm@1: { "A1", "Hori" }, rlm@1: { "A4", "Konami" }, rlm@1: { "A6", "Kawada" }, rlm@1: { "A7", "Takara" }, rlm@1: { "A9", "Technos Japan Corp." }, rlm@1: { "AA", "JVC" }, rlm@1: { "AC", "Toei Animation" }, rlm@1: { "AD", "Toho" }, rlm@1: { "AF", "Namco" }, rlm@1: { "AG", "Media Rings Corporation" }, rlm@1: { "AH", "J-Wing" }, rlm@1: { "AK", "KID" }, rlm@1: { "AL", "MediaFactory" }, rlm@1: { "AP", "Infogrames Hudson" }, rlm@1: { "AQ", "Kiratto. Ludic Inc" }, rlm@1: { "B0", "Acclaim Japan" }, rlm@1: { "B1", "ASCII" }, rlm@1: { "B2", "Bandai" }, rlm@1: { "B4", "Enix" }, rlm@1: { "B6", "HAL Laboratory" }, rlm@1: { "B7", "SNK" }, rlm@1: { "B9", "Pony Canyon Hanbai" }, rlm@1: { "BA", "Culture Brain" }, rlm@1: { "BB", "Sunsoft" }, rlm@1: { "BD", "Sony Imagesoft" }, rlm@1: { "BF", "Sammy" }, rlm@1: { "BG", "Magical" }, rlm@1: { "BJ", "Compile" }, rlm@1: { "BL", "MTO Inc." }, rlm@1: { "BN", "Sunrise Interactive" }, rlm@1: { "BP", "Global A Entertainment" }, rlm@1: { "BQ", "Fuuki" }, rlm@1: { "C0", "Taito" }, rlm@1: { "C2", "Kemco" }, rlm@1: { "C3", "Square Soft" }, rlm@1: { "C5", "Data East" }, rlm@1: { "C6", "Tonkin House" }, rlm@1: { "C8", "Koei" }, rlm@1: { "CA", "Konami/Palcom/Ultra" }, rlm@1: { "CB", "Vapinc/NTVIC" }, rlm@1: { "CC", "Use Co.,Ltd." }, rlm@1: { "CD", "Meldac" }, rlm@1: { "CE", "FCI/Pony Canyon" }, rlm@1: { "CF", "Angel" }, rlm@1: { "CM", "Konami Computer Entertainment Osaka" }, rlm@1: { "CP", "Enterbrain" }, rlm@1: { "D1", "Sofel" }, rlm@1: { "D2", "Quest" }, rlm@1: { "D3", "Sigma Enterprises" }, rlm@1: { "D4", "Ask Kodansa" }, rlm@1: { "D6", "Naxat" }, rlm@1: { "D7", "Copya System" }, rlm@1: { "D9", "Banpresto" }, rlm@1: { "DA", "TOMY" }, rlm@1: { "DB", "LJN Japan" }, rlm@1: { "DD", "NCS" }, rlm@1: { "DF", "Altron Corporation" }, rlm@1: { "DH", "Gaps Inc." }, rlm@1: { "DN", "ELF" }, rlm@1: { "E2", "Yutaka" }, rlm@1: { "E3", "Varie" }, rlm@1: { "E5", "Epoch" }, rlm@1: { "E7", "Athena" }, rlm@1: { "E8", "Asmik Ace Entertainment Inc." }, rlm@1: { "E9", "Natsume" }, rlm@1: { "EA", "King Records" }, rlm@1: { "EB", "Atlus" }, rlm@1: { "EC", "Epic/Sony Records" }, rlm@1: { "EE", "IGS" }, rlm@1: { "EL", "Spike" }, rlm@1: { "EM", "Konami Computer Entertainment Tokyo" }, rlm@1: { "EN", "Alphadream Corporation" }, rlm@1: { "F0", "A Wave" }, rlm@1: { "G1", "PCCW" }, rlm@1: { "G4", "KiKi Co Ltd" }, rlm@1: { "G5", "Open Sesame Inc." }, rlm@1: { "G6", "Sims" }, rlm@1: { "G7", "Broccoli" }, rlm@1: { "G8", "Avex" }, rlm@1: { "G9", "D3 Publisher" }, rlm@1: { "GB", "Konami Computer Entertainment Japan" }, rlm@1: { "GD", "Square-Enix" }, rlm@1: { "HY", "Sachen" }, rlm@1: { NULL, NULL } rlm@1: }; rlm@1: rlm@1: static LPCTSTR winGBARomInfoFindMakerCode(LPCTSTR code) rlm@1: { rlm@1: int i = 0; rlm@1: while (winGBARomInfoCompanies[i].code) rlm@1: { rlm@1: if (!strcmp(winGBARomInfoCompanies[i].code, code)) rlm@1: return winGBARomInfoCompanies[i].name; rlm@1: i++; rlm@1: } rlm@1: return (LPCTSTR)winResLoadString(IDS_UNKNOWN); rlm@1: } rlm@1: rlm@1: ///////////////////////////////////////////////////////////////////////////// rlm@1: // RomInfoGB dialog rlm@1: rlm@1: RomInfoGB::RomInfoGB(u8 *rom, CWnd *pParent /*=NULL*/) rlm@1: : CDialog(RomInfoGB::IDD, pParent) rlm@1: { rlm@1: //{{AFX_DATA_INIT(RomInfoGB) rlm@1: // NOTE: the ClassWizard will add member initialization here rlm@1: //}}AFX_DATA_INIT rlm@1: this->rom = rom; rlm@1: } rlm@1: rlm@1: void RomInfoGB::DoDataExchange(CDataExchange *pDX) rlm@1: { rlm@1: CDialog::DoDataExchange(pDX); rlm@1: //{{AFX_DATA_MAP(RomInfoGB) rlm@1: // NOTE: the ClassWizard will add DDX and DDV calls here rlm@1: //}}AFX_DATA_MAP rlm@1: } rlm@1: rlm@1: BEGIN_MESSAGE_MAP(RomInfoGB, CDialog) rlm@1: //{{AFX_MSG_MAP(RomInfoGB) rlm@1: ON_BN_CLICKED(ID_OK, OnOk) rlm@1: //}}AFX_MSG_MAP rlm@1: END_MESSAGE_MAP() rlm@1: rlm@1: ///////////////////////////////////////////////////////////////////////////// rlm@1: // RomInfoGB message handlers rlm@1: rlm@1: void RomInfoGB::OnOk() rlm@1: { rlm@1: EndDialog(TRUE); rlm@1: } rlm@1: rlm@1: BOOL RomInfoGB::OnInitDialog() rlm@1: { rlm@1: CDialog::OnInitDialog(); rlm@1: rlm@1: char buffer[128]; rlm@1: rlm@1: strncpy(buffer, (const char *)&rom[0x134], 15); rlm@1: buffer[15] = 0; rlm@1: GetDlgItem(IDC_ROM_TITLE)->SetWindowText(buffer); rlm@1: rlm@1: sprintf(buffer, "%02x", rom[0x143]); rlm@1: GetDlgItem(IDC_ROM_COLOR)->SetWindowText(buffer); rlm@1: rlm@1: strncpy(buffer, (const char *)&rom[0x144], 2); rlm@1: buffer[2] = 0; rlm@1: GetDlgItem(IDC_ROM_MAKER_CODE)->SetWindowText(buffer); rlm@1: rlm@1: if (rom[0x14b] != 0x33) rlm@1: { rlm@1: sprintf(buffer, "%02X", rom[0x14b]); rlm@1: GetDlgItem(IDC_ROM_MAKER_CODE)->SetWindowText(buffer); rlm@1: } rlm@1: GetDlgItem(IDC_ROM_MAKER_NAME2)->SetWindowText(winGBARomInfoFindMakerCode(buffer)); rlm@1: rlm@1: sprintf(buffer, "%02x", rom[0x146]); rlm@1: GetDlgItem(IDC_ROM_UNIT_CODE)->SetWindowText(buffer); rlm@1: rlm@1: CString type = winResLoadString(IDS_UNKNOWN); rlm@1: switch (rom[0x147]) rlm@1: { rlm@1: case 0x00: rlm@1: type = "ROM"; rlm@1: break; rlm@1: case 0x01: rlm@1: type = "ROM+MBC1"; rlm@1: break; rlm@1: case 0x02: rlm@1: type = "ROM+MBC1+RAM"; rlm@1: break; rlm@1: case 0x03: rlm@1: type = "ROM+MBC1+RAM+BATT"; rlm@1: break; rlm@1: case 0x05: rlm@1: type = "ROM+MBC2"; rlm@1: break; rlm@1: case 0x06: rlm@1: type = "ROM+MBC2+BATT"; rlm@1: break; rlm@1: case 0x0f: rlm@1: type = "ROM+MBC3+TIMER+BATT"; rlm@1: break; rlm@1: case 0x10: rlm@1: type = "ROM+MBC3+TIMER+RAM+BATT"; rlm@1: break; rlm@1: case 0x11: rlm@1: type = "ROM+MBC3"; rlm@1: break; rlm@1: case 0x12: rlm@1: type = "ROM+MBC3+RAM"; rlm@1: break; rlm@1: case 0x13: rlm@1: type = "ROM+MBC3+RAM+BATT"; rlm@1: break; rlm@1: case 0x19: rlm@1: type = "ROM+MBC5"; rlm@1: break; rlm@1: case 0x1a: rlm@1: type = "ROM+MBC5+RAM"; rlm@1: break; rlm@1: case 0x1b: rlm@1: type = "ROM+MBC5+RAM+BATT"; rlm@1: break; rlm@1: case 0x1c: rlm@1: type = "ROM+MBC5+RUMBLE"; rlm@1: break; rlm@1: case 0x1d: rlm@1: type = "ROM+MBC5+RUMBLE+RAM"; rlm@1: break; rlm@1: case 0x1e: rlm@1: type = "ROM+MBC5+RUMBLE+RAM+BATT"; rlm@1: break; rlm@1: case 0x22: rlm@1: type = "ROM+MBC7+BATT"; rlm@1: break; rlm@1: case 0xfe: rlm@1: type = "ROM+HuC-3"; rlm@1: break; rlm@1: case 0xff: rlm@1: type = "ROM+HuC-1"; rlm@1: break; rlm@1: } rlm@1: sprintf(buffer, "%02x (%s)", rom[0x147], (const char *)type); rlm@1: GetDlgItem(IDC_ROM_DEVICE_TYPE)->SetWindowText(buffer); rlm@1: rlm@1: type = winResLoadString(IDS_UNKNOWN); rlm@1: switch (rom[0x148]) rlm@1: { rlm@1: case 0: rlm@1: type = "32K"; rlm@1: break; rlm@1: case 1: rlm@1: type = "64K"; rlm@1: break; rlm@1: case 2: rlm@1: type = "128K"; rlm@1: break; rlm@1: case 3: rlm@1: type = "256K"; rlm@1: break; rlm@1: case 4: rlm@1: type = "512K"; rlm@1: break; rlm@1: case 5: rlm@1: type = "1M"; rlm@1: break; rlm@1: case 6: rlm@1: type = "2M"; rlm@1: break; rlm@1: case 7: rlm@1: type = "4M"; rlm@1: break; rlm@1: } rlm@1: rlm@1: sprintf(buffer, "%02x (%s)", rom[0x148], (const char *)type); rlm@1: GetDlgItem(IDC_ROM_SIZE)->SetWindowText(buffer); rlm@1: rlm@1: type = winResLoadString(IDS_UNKNOWN); rlm@1: switch (rom[0x149]) rlm@1: { rlm@1: case 0: rlm@1: type = winResLoadString(IDS_NONE); rlm@1: break; rlm@1: case 1: rlm@1: type = "2K"; rlm@1: break; rlm@1: case 2: rlm@1: type = "8K"; rlm@1: break; rlm@1: case 3: rlm@1: type = "32K"; rlm@1: break; rlm@1: case 4: rlm@1: type = "128K"; rlm@1: break; rlm@1: case 5: rlm@1: type = "64K"; rlm@1: break; rlm@1: } rlm@1: rlm@1: sprintf(buffer, "%02x (%s)", rom[0x149], (const char *)type); rlm@1: GetDlgItem(IDC_ROM_RAM_SIZE)->SetWindowText(buffer); rlm@1: rlm@1: sprintf(buffer, "%02x", rom[0x14a]); rlm@1: GetDlgItem(IDC_ROM_DEST_CODE)->SetWindowText(buffer); rlm@1: rlm@1: sprintf(buffer, "%02x", rom[0x14b]); rlm@1: GetDlgItem(IDC_ROM_LIC_CODE)->SetWindowText(buffer); rlm@1: rlm@1: sprintf(buffer, "%02x", rom[0x14c]); rlm@1: GetDlgItem(IDC_ROM_VERSION)->SetWindowText(buffer); rlm@1: rlm@1: u8 crc8 = 25; rlm@1: int i; rlm@1: for (i = 0x134; i < 0x14d; i++) rlm@1: { rlm@1: crc8 = (crc8 + rom[i]) & 0xFF; rlm@1: } rlm@1: rlm@1: crc8 = 256 - crc8; rlm@1: rlm@1: sprintf(buffer, "%02x (%02x)", crc8, rom[0x14d]); rlm@1: GetDlgItem(IDC_ROM_CRC)->SetWindowText(buffer); rlm@1: rlm@1: u16 crc16 = 0; rlm@1: for (i = 0; i < gbRomSize; i++) rlm@1: { rlm@1: crc16 = (crc16 + rom[i]) & 0xFFFF; rlm@1: } rlm@1: rlm@1: crc16 -= rom[0x14e]; rlm@1: crc16 -= rom[0x14f]; rlm@1: sprintf(buffer, "%04x (%04x)", crc16, (rom[0x14e] << 8) | rom[0x14f]); rlm@1: GetDlgItem(IDC_ROM_CHECKSUM)->SetWindowText(buffer); rlm@1: rlm@1: CenterWindow(); rlm@1: rlm@1: return TRUE; // return TRUE unless you set the focus to a control rlm@1: // EXCEPTION: OCX Property Pages should return FALSE rlm@1: } rlm@1: rlm@1: ///////////////////////////////////////////////////////////////////////////// rlm@1: // RomInfoGBA dialog rlm@1: rlm@1: RomInfoGBA::RomInfoGBA(u8 *rom, CWnd *pParent /*=NULL*/) rlm@1: : CDialog(RomInfoGBA::IDD, pParent) rlm@1: { rlm@1: //{{AFX_DATA_INIT(RomInfoGBA) rlm@1: // NOTE: the ClassWizard will add member initialization here rlm@1: //}}AFX_DATA_INIT rlm@1: this->rom = rom; rlm@1: } rlm@1: rlm@1: void RomInfoGBA::DoDataExchange(CDataExchange *pDX) rlm@1: { rlm@1: CDialog::DoDataExchange(pDX); rlm@1: //{{AFX_DATA_MAP(RomInfoGBA) rlm@1: // NOTE: the ClassWizard will add DDX and DDV calls here rlm@1: //}}AFX_DATA_MAP rlm@1: } rlm@1: rlm@1: BEGIN_MESSAGE_MAP(RomInfoGBA, CDialog) rlm@1: //{{AFX_MSG_MAP(RomInfoGBA) rlm@1: ON_BN_CLICKED(ID_OK, OnOk) rlm@1: //}}AFX_MSG_MAP rlm@1: END_MESSAGE_MAP() rlm@1: rlm@1: ///////////////////////////////////////////////////////////////////////////// rlm@1: // RomInfoGBA message handlers rlm@1: rlm@1: void RomInfoGBA::OnOk() rlm@1: { rlm@1: EndDialog(TRUE); rlm@1: } rlm@1: rlm@1: BOOL RomInfoGBA::OnInitDialog() rlm@1: { rlm@1: CDialog::OnInitDialog(); rlm@1: rlm@1: char buffer[13]; rlm@1: rlm@1: strncpy(buffer, (const char *)&rom[0xa0], 12); rlm@1: buffer[12] = 0; rlm@1: GetDlgItem(IDC_ROM_TITLE)->SetWindowText(buffer); rlm@1: rlm@1: strncpy(buffer, (const char *)&rom[0xac], 4); rlm@1: buffer[4] = 0; rlm@1: GetDlgItem(IDC_ROM_GAME_CODE)->SetWindowText(buffer); rlm@1: rlm@1: strncpy(buffer, (const char *)&rom[0xb0], 2); rlm@1: buffer[2] = 0; rlm@1: GetDlgItem(IDC_ROM_MAKER_CODE)->SetWindowText(buffer); rlm@1: rlm@1: GetDlgItem(IDC_ROM_MAKER_NAME)->SetWindowText(winGBARomInfoFindMakerCode(buffer)); rlm@1: rlm@1: sprintf(buffer, "%02x", rom[0xb3]); rlm@1: GetDlgItem(IDC_ROM_UNIT_CODE)->SetWindowText(buffer); rlm@1: rlm@1: sprintf(buffer, "%02x", rom[0xb4]); rlm@1: GetDlgItem(IDC_ROM_DEVICE_TYPE)->SetWindowText(buffer); rlm@1: rlm@1: sprintf(buffer, "%02x", rom[0xbc]); rlm@1: GetDlgItem(IDC_ROM_VERSION)->SetWindowText(buffer); rlm@1: rlm@1: u8 crc = 0x19; rlm@1: for (int i = 0xa0; i < 0xbd; i++) rlm@1: { rlm@1: crc = (crc + rom[i]) & 0xff; rlm@1: } rlm@1: rlm@1: crc = (-crc) & 0xff; rlm@1: rlm@1: sprintf(buffer, "%02x (%02x)", crc, rom[0xbd]); rlm@1: GetDlgItem(IDC_ROM_CRC)->SetWindowText(buffer); rlm@1: CenterWindow(); rlm@1: rlm@1: return TRUE; // return TRUE unless you set the focus to a control rlm@1: // EXCEPTION: OCX Property Pages should return FALSE rlm@1: } rlm@1: