BOOL RomInfoGBA::OnInitDialog() { CDialog::OnInitDialog(); TCHAR buffer[13]; CStringA bufferA((const char *)&rom[0xa0], 12); GetDlgItem(IDC_ROM_TITLE)->SetWindowText(CString(bufferA)); bufferA = CStringA((const char *)&rom[0xac], 4); GetDlgItem(IDC_ROM_GAME_CODE)->SetWindowText(CString(bufferA)); bufferA = CStringA((const char *)&rom[0xb0], 2); GetDlgItem(IDC_ROM_MAKER_CODE)->SetWindowText(CString(bufferA)); GetDlgItem(IDC_ROM_MAKER_NAME)->SetWindowText(winGBARomInfoFindMakerCode(buffer)); _stprintf(buffer, _T("%02x"), rom[0xb3]); GetDlgItem(IDC_ROM_UNIT_CODE)->SetWindowText(buffer); _stprintf(buffer, _T("%02x"), rom[0xb4]); if( rom[0xb4] & 0x80 ) { _tcscat(buffer, _T(" (DACS)")); } GetDlgItem(IDC_ROM_DEVICE_TYPE)->SetWindowText(buffer); _stprintf(buffer, _T("%02x"), rom[0xbc]); GetDlgItem(IDC_ROM_VERSION)->SetWindowText(buffer); u8 crc = 0x19; for(int i = 0xa0; i < 0xbd; i++) { crc += rom[i]; } crc = (-crc) & 255; _stprintf(buffer, _T("%02x (%02x)"), crc, rom[0xbd]); GetDlgItem(IDC_ROM_CRC)->SetWindowText(buffer); CenterWindow(); return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE }
int main() { std::cout << "[INFO] Starting main function" << std::endl; try { // Retrieve platforms std::vector<cl::Platform> platforms; cl::Platform::get(&platforms); // Check number of platforms found if (platforms.size() == 0) { std::cerr << "[ERROR] No platform found. Check OpenCL installation!" << std::endl; exit(1); } else { std::cout << "[INFO] " << platforms.size() << " platforms found." << std::endl; } // TODO(disiok): Add parameters to choose platforms // Select default platform cl::Platform defaultPlatform = platforms[0]; std::cout << "[INFO] Using platform: " << defaultPlatform.getInfo<CL_PLATFORM_NAME>() << std::endl; // Retrieve devices std::vector<cl::Device> devices; defaultPlatform.getDevices(CL_DEVICE_TYPE_ALL, &devices); // Check number of devices found if (devices.size() == 0) { std::cerr << "[ERROR] No devices found. Check OpenCL installation!" << std::endl; exit(2); } else { std::cout << "[INFO] " << devices.size() << " devices found." << std::endl; } // TODO(disiok): Add parameters to choose devices // Select default device cl::Device defaultDevice = devices[1]; std::cout << "[INFO] Using device: " << defaultDevice.getInfo<CL_DEVICE_NAME>() << std::endl; // Create context cl::Context context({defaultDevice}); // Define kernel code cl::Program::Sources sources; std::ifstream ifs("addvec.cl"); std::string kernelCode( (std::istreambuf_iterator<char>(ifs)), (std::istreambuf_iterator<char>())); sources.push_back({kernelCode.c_str(), kernelCode.length()}); // Build kernel code cl::Program program(context, sources); if (program.build({defaultDevice}) != CL_SUCCESS) { std::cerr << "[ERROR] Error building: " << program.getBuildInfo<CL_PROGRAM_BUILD_LOG>(defaultDevice) << std::endl; exit(4); } else { std::cout << "[INFO] Successfully built kernel program" << std::endl; } // Create buffers on the devices cl::Buffer bufferA(context, CL_MEM_READ_WRITE, sizeof(int) * 10); cl::Buffer bufferB(context, CL_MEM_READ_WRITE, sizeof(int) * 10); cl::Buffer bufferC(context, CL_MEM_READ_WRITE, sizeof(int) * 10); // Hardcode some arrays for testing int a[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; int b[] = {9, 8, 7, 6, 5, 4, 3, 2, 1, 0}; // Create qeueue to push commands for the devices cl::CommandQueue queue(context, defaultDevice); // Write data to the device queue.enqueueWriteBuffer(bufferA, CL_TRUE, 0, sizeof(int) * 10, a); queue.enqueueWriteBuffer(bufferB, CL_TRUE, 0, sizeof(int) * 10, b); // NOTE(disiok): KernelFunctor is removed from the API in v1.2 // cl::KernelFunctor simple_add( // cl::Kernel(program, "simple_add"), // queue, // cl::NullRrange, // cl::NDRange(10), // cl::NullRange); // Run kernel with functor cl::Kernel kernel = cl::Kernel(program, "simple_add"); kernel.setArg(0, bufferA); kernel.setArg(1, bufferB); kernel.setArg(2, bufferC); queue.enqueueNDRangeKernel(kernel, cl::NullRange, cl::NDRange(10), cl::NullRange); queue.finish(); // Read results int c[10]; queue.enqueueReadBuffer(bufferC, CL_TRUE, 0, sizeof(int) * 10, c); // Print results std::cout << "The result is: " << std::endl; for (int i = 0; i < 10; i ++) { std::cout << c[i] << " "; } std::cout << std::endl; } catch (cl::Error error) { std::cerr << error.what() << "(" << error.err() << ")" << std::endl; } }
BOOL RomInfoGB::OnInitDialog() { CDialog::OnInitDialog(); TCHAR buffer[128]; CStringA bufferA((const char *)&rom[0x134], 15); GetDlgItem(IDC_ROM_TITLE)->SetWindowText(CString(bufferA)); _stprintf(buffer, _T("%02x"), rom[0x143]); GetDlgItem(IDC_ROM_COLOR)->SetWindowText(buffer); bufferA = CStringA((const char *)&rom[0x144], 2); GetDlgItem(IDC_ROM_MAKER_CODE)->SetWindowText(CString(bufferA)); if(rom[0x14b] != 0x33) { _stprintf(buffer, _T("%02X"), rom[0x14b]); GetDlgItem(IDC_ROM_MAKER_CODE)->SetWindowText(buffer); } GetDlgItem(IDC_ROM_MAKER_NAME2)->SetWindowText(winGBARomInfoFindMakerCode(buffer)); _stprintf(buffer, _T("%02x"), rom[0x146]); GetDlgItem(IDC_ROM_UNIT_CODE)->SetWindowText(buffer); CString type = winResLoadString(IDS_UNKNOWN); switch(rom[0x147]) { case 0x00: type = _T("ROM"); break; case 0x01: type = _T("ROM+MBC1"); break; case 0x02: type = _T("ROM+MBC1+RAM"); break; case 0x03: type = _T("ROM+MBC1+RAM+BATT"); break; case 0x05: type = _T("ROM+MBC2"); break; case 0x06: type = _T("ROM+MBC2+BATT"); break; case 0x0b: type = _T("ROM+MMM01"); break; case 0x0c: type = _T("ROM+MMM01+RAM"); break; case 0x0d: type = _T("ROM+MMM01+RAM+BATT"); break; case 0x0f: type = _T("ROM+MBC3+TIMER+BATT"); break; case 0x10: type = _T("ROM+MBC3+TIMER+RAM+BATT"); break; case 0x11: type = _T("ROM+MBC3"); break; case 0x12: type = _T("ROM+MBC3+RAM"); break; case 0x13: type = _T("ROM+MBC3+RAM+BATT"); break; case 0x19: type = _T("ROM+MBC5"); break; case 0x1a: type = _T("ROM+MBC5+RAM"); break; case 0x1b: type = _T("ROM+MBC5+RAM+BATT"); break; case 0x1c: type = _T("ROM+MBC5+RUMBLE"); break; case 0x1d: type = _T("ROM+MBC5+RUMBLE+RAM"); break; case 0x1e: type = _T("ROM+MBC5+RUMBLE+RAM+BATT"); break; case 0x22: type = _T("ROM+MBC7+BATT"); break; case 0x55: type = _T("GameGenie"); break; case 0x56: type = _T("GameShark V3.0"); break; case 0xfc: type = _T("ROM+POCKET CAMERA"); break; case 0xfd: type = _T("ROM+BANDAI TAMA5"); break; case 0xfe: type = _T("ROM+HuC-3"); break; case 0xff: type = _T("ROM+HuC-1"); break; } _stprintf(buffer, _T("%02x (%s)"), rom[0x147], type); GetDlgItem(IDC_ROM_DEVICE_TYPE)->SetWindowText(buffer); type = winResLoadString(IDS_UNKNOWN); switch(rom[0x148]) { case 0: type = _T("32K"); break; case 1: type = _T("64K"); break; case 2: type = _T("128K"); break; case 3: type = _T("256K"); break; case 4: type = _T("512K"); break; case 5: type = _T("1M"); break; case 6: type = _T("2M"); break; case 7: type = _T("4M"); break; } _stprintf(buffer, _T("%02x (%s)"), rom[0x148], type); GetDlgItem(IDC_ROM_SIZE)->SetWindowText(buffer); type = winResLoadString(IDS_UNKNOWN); switch(rom[0x149]) { case 0: type = winResLoadString(IDS_NONE); break; case 1: type = _T("2K"); break; case 2: type = _T("8K"); break; case 3: type = _T("32K"); break; case 4: type = _T("128K"); break; case 5: type = _T("64K"); break; } _stprintf(buffer, _T("%02x (%s)"), rom[0x149], type); GetDlgItem(IDC_ROM_RAM_SIZE)->SetWindowText(buffer); _stprintf(buffer, _T("%02x"), rom[0x14a]); GetDlgItem(IDC_ROM_DEST_CODE)->SetWindowText(buffer); _stprintf(buffer, _T("%02x"), rom[0x14b]); GetDlgItem(IDC_ROM_LIC_CODE)->SetWindowText(buffer); _stprintf(buffer, _T("%02x"), rom[0x14c]); GetDlgItem(IDC_ROM_VERSION)->SetWindowText(buffer); u8 crc = 25; int i; for(i = 0x134; i < 0x14d; i++) { crc += rom[i]; } crc = 256 - crc; _stprintf(buffer, _T("%02x (%02x)"), crc, rom[0x14d]); GetDlgItem(IDC_ROM_CRC)->SetWindowText(buffer); u16 crc16 = 0; for(i = 0; i < gbRomSize; i++) { crc16 += rom[i]; } crc16 -= rom[0x14e]; crc16 -= rom[0x14f]; _stprintf(buffer, _T("%04x (%04x)"), crc16, (rom[0x14e]<<8)|rom[0x14f]); GetDlgItem(IDC_ROM_CHECKSUM)->SetWindowText(buffer); CenterWindow(); return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE }