void screenInit() { //Grab the buffer size for each screen (TV and gamepad) int buf0_size = OSScreenGetBufferSizeEx(0); int buf1_size = OSScreenGetBufferSizeEx(1); __os_snprintf(log_buf, 0x400, "Screen sizes %x, %x\n", buf0_size, buf1_size); OSReport(log_buf); //Set the buffer area. screenBuffer = MEM1_alloc(buf0_size + buf1_size, 0x40); __os_snprintf(log_buf, 0x400, "Allocated screen buffers at %x\n", screenBuffer); OSReport(log_buf); OSScreenSetBufferEx(0, screenBuffer); OSScreenSetBufferEx(1, (screenBuffer + buf0_size)); OSReport("Set screen buffers\n"); OSScreenEnableEx(0, 1); OSScreenEnableEx(1, 1); //Clear both framebuffers. for (int ii = 0; ii < 2; ii++) { fillScreen(0,0,0,0); flipBuffers(); } }
void consoleInit() { MEMHeapHandle mem1; OSScreenInit(); bufferSizeTV = OSScreenGetBufferSizeEx(SCREEN_TV); bufferSizeDRC = OSScreenGetBufferSizeEx(SCREEN_DRC); mem1 = MEMGetBaseHeapHandle(MEM_BASE_HEAP_MEM2); bufferTV = MEMAllocFromExpHeapEx(mem1, bufferSizeTV, 4); bufferDRC = MEMAllocFromExpHeapEx(mem1, bufferSizeDRC, 4); OSScreenSetBufferEx(SCREEN_TV, bufferTV); OSScreenSetBufferEx(SCREEN_DRC, bufferDRC); OSScreenEnableEx(SCREEN_TV, 1); OSScreenEnableEx(SCREEN_DRC, 1); }
/* Entry point */ int Menu_Main(void) { //!******************************************************************* //! Initialize function pointers * //!******************************************************************* //! do OS (for acquire) and sockets first so we got logging InitOSFunctionPointers(); InitSocketFunctionPointers(); InitFSFunctionPointers(); InitVPadFunctionPointers(); InitSysFunctionPointers(); InitAocFunctionPointers(); log_init("192.168.178.3"); log_deinit(); log_init("192.168.178.3"); log_printf("Started %s\n", cosAppXmlInfoStruct.rpx_name); if(strcasecmp("men.rpx", cosAppXmlInfoStruct.rpx_name) == 0) { CheckPendingMetaDump(); return EXIT_RELAUNCH_ON_LOAD; } else if(strlen(cosAppXmlInfoStruct.rpx_name) > 0 && strcasecmp("ffl_app.rpx", cosAppXmlInfoStruct.rpx_name) != 0) { StartDumper(); return EXIT_RELAUNCH_ON_LOAD; } // initialize memory tables once on start memoryInitAreaTable(); rpxRplTableInit(); SetupKernelCallback(); PatchMethodHooks(); memoryInitialize(); VPADInit(); // Prepare screen int screen_buf0_size = 0; int screen_buf1_size = 0; // Init screen and screen buffers OSScreenInit(); screen_buf0_size = OSScreenGetBufferSizeEx(0); screen_buf1_size = OSScreenGetBufferSizeEx(1); unsigned char *screenBuffer = MEM1_alloc(screen_buf0_size + screen_buf1_size, 0x40); OSScreenSetBufferEx(0, screenBuffer); OSScreenSetBufferEx(1, (screenBuffer + screen_buf0_size)); OSScreenEnableEx(0, 1); OSScreenEnableEx(1, 1); char msg[80]; uint8_t sel_ip = 3; int launchMethod = 0; int update_screen = 1; int vpadError = -1; VPADData vpad_data; u_serv_ip ip; ip.full = GetServerIp(); int delay = 0; while (1) { // Read vpad VPADRead(0, &vpad_data, 1, &vpadError); if(update_screen) { OSScreenClearBufferEx(0, 0); OSScreenClearBufferEx(1, 0); // Print message PRINT_TEXT2(14, 1, "-- DDD v0.2 by Dimok --"); PRINT_TEXT2(0, 5, "1. Setup IP address of server application."); // Print ip digit selector uint8_t x_shift = 17 + 4 * sel_ip; PRINT_TEXT2(x_shift, 6, "vvv"); PRINT_TEXT2(0, 7, " Server IP: %3d.%3d.%3d.%3d", ip.digit[0], ip.digit[1], ip.digit[2], ip.digit[3]); PRINT_TEXT2(0, 10, "2. Press A to install dumper and try to launch disc."); PRINT_TEXT2(0, 11, " or Press X to install dumper and return to system menu."); PRINT_TEXT2(0, 13, "3. Start the title to be dumped."); PRINT_TEXT2(0, 17, "Press home button to exit ..."); OSScreenFlipBuffersEx(0); OSScreenFlipBuffersEx(1); } u32 pressedBtns = vpad_data.btns_d | vpad_data.btns_h; // Check for buttons // Home Button if (pressedBtns & VPAD_BUTTON_HOME) { launchMethod = 0; break; } // A Button if (pressedBtns & VPAD_BUTTON_A) { SetServerIp(ip.full); launchMethod = 1; break; } // A Button if (pressedBtns & VPAD_BUTTON_X) { SetServerIp(ip.full); launchMethod = 2; break; } // Left/Right Buttons if (vpad_data.btns_d & VPAD_BUTTON_LEFT ) { if(sel_ip == 0) sel_ip = 3; else --sel_ip; } if (vpad_data.btns_d & VPAD_BUTTON_RIGHT) { sel_ip = ((sel_ip + 1) % 4); } // Up/Down Buttons if (pressedBtns & VPAD_BUTTON_UP) { if(--delay <= 0) { ip.digit[sel_ip]++; delay = (vpad_data.btns_d & VPAD_BUTTON_UP) ? 6 : 0; } } else if (pressedBtns & VPAD_BUTTON_DOWN) { if(--delay <= 0) { ip.digit[sel_ip]--; delay = (vpad_data.btns_d & VPAD_BUTTON_DOWN) ? 6 : 0; } } else { delay = 0; } // Button pressed ? update_screen = (pressedBtns & (VPAD_BUTTON_LEFT | VPAD_BUTTON_RIGHT | VPAD_BUTTON_UP | VPAD_BUTTON_DOWN)) ? 1 : 0; usleep(20000); } MEM1_free(screenBuffer); screenBuffer = NULL; log_deinit(); memoryRelease(); if(launchMethod == 0) { RestoreInstructions(); return EXIT_SUCCESS; } else if(launchMethod == 1) { char buf_vol_odd[20]; snprintf(buf_vol_odd, sizeof(buf_vol_odd), "%s", "/vol/storage_odd03"); _SYSLaunchTitleByPathFromLauncher(buf_vol_odd, 18, 0); } else { SYSLaunchMenu(); } return EXIT_RELAUNCH_ON_LOAD; }