estoy intentando modificar y mejorar el usb loader , pero no se porque se estira la imagen , he cogido el codigo fuente del 1.1s la he traducido le insertado la foto , he creado el canal .... ital
pero mi sorpresa es que se estira , estoy en HDtv .
imagen para crear el canal
imagen para crear el DOl
codigo de menu.c traducido al español
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <malloc.h>
#include <ogcsys.h>
#include "disc.h"
#include "menu.h"
#include "partition.h"
#include "restart.h"
#include "sys.h"
#include "utils.h"
#include "video.h"
#include "wbfs.h"
#include "wpad.h"
/* Constants */
#define ENTRIES_PER_PAGE 21
#define MAX_CHARACTERS 38
/* Gamelist variables */
static struct discHdr *gameList = NULL;
static u32 gameCnt = 0;
static s32 gameSelected = 0, gameStart = 0;
s32 __Menu_EntryCmp(const void *a, const void *b)
{
struct discHdr *hdr1 = (struct discHdr *)a;
struct discHdr *hdr2 = (struct discHdr *)b;
/* Compare strings */
return stricmp(hdr1->title, hdr2->title);
}
s32 __Menu_GetEntries(void)
{
struct discHdr *buffer = NULL;
u32 cnt, len;
s32 ret;
/* Get list length */
ret = WBFS_GetCount(&cnt);
if (ret < 0)
return ret;
/* Buffer length */
len = sizeof(struct discHdr) * cnt;
/* Allocate memory */
buffer = (struct discHdr *)memalign(32, len);
if (!buffer)
return -1;
/* Clear buffer */
memset(buffer, 0, len);
/* Get header list */
ret = WBFS_GetHeaders(buffer, cnt, sizeof(struct discHdr));
if (ret < 0)
goto err;
/* Sort entries */
qsort(buffer, cnt, sizeof(struct discHdr), __Menu_EntryCmp);
/* Free memory */
if (gameList)
free(gameList);
/* Set values */
gameList = buffer;
gameCnt = cnt;
/* Reset variables */
gameSelected = gameStart = 0;
return 0;
err:
/* Free memory */
if (buffer)
free(buffer);
return ret;
}
void __Menu_MoveEntry(s8 delta)
{
s32 index;
/* No game list */
if (!gameCnt)
return;
if(delta>0)
{
if(gameSelected == gameCnt - 1)
{
gameSelected = 0;
}
else
{
gameSelected +=delta;
if(gameSelected >= gameCnt)
{
gameSelected = (gameCnt - 1);
}
}
}
else
{
if(!gameSelected)
{
gameSelected = gameCnt - 1;
}
else
{
gameSelected +=delta;
if(gameSelected < 0)
{
gameSelected = 0;
}
}
}
/* List scrolling */
index = (gameSelected - gameStart);
if (index >= ENTRIES_PER_PAGE)
gameStart += index - (ENTRIES_PER_PAGE - 1);
if (index <= -1)
gameStart += index;
}
char *__Menu_PrintTitle(char *name)
{
static char buffer[MAX_CHARACTERS + 1];
memset(buffer, 0, sizeof(buffer));
strncpy(buffer, name, MAX_CHARACTERS);
return buffer;
}
void __Menu_PrintInfo(struct discHdr *header)
{
f32 size = 0.0;
/* Get game size */
WBFS_GameSize(header->id, &size);
/* Print game info */
printf(" %s\n", header->title);
printf(" (%c%c%c%c) (%.2fGB)\n\n", header->id[0], header->id[1], header->id[2], header->id[3], size);
}
void __Menu_PrintEntries(void)
{
u32 cnt;
/* No game list*/
if (!gameCnt) {
printf("\t>> No se han encontrado juegos!!\n\n");
return;
}
/* Print game list */
for (cnt = gameStart; cnt < gameCnt; cnt++) {
struct discHdr *header = &gameList[cnt];
/* Entries per page limit reached */
if ((cnt - gameStart) >= ENTRIES_PER_PAGE)
break;
/* Print entry */
printf(" %2s %s\n", (gameSelected == cnt) ? ">>" : " ", __Menu_PrintTitle(header->title));
}
printf("\n");
}
void __Menu_Controls(void)
{
u32 buttons = Wpad_WaitButtons();
/* UP/DOWN buttons */
if (buttons & WPAD_BUTTON_UP)
__Menu_MoveEntry(-1);
if (buttons & WPAD_BUTTON_DOWN)
__Menu_MoveEntry(1);
/* LEFT/RIGHT buttons */
if (buttons & WPAD_BUTTON_LEFT)
__Menu_MoveEntry((gameSelected-gameStart == 0) ? -ENTRIES_PER_PAGE : -(gameSelected-gameStart));
if (buttons & WPAD_BUTTON_RIGHT)
__Menu_MoveEntry((gameSelected-gameStart == (ENTRIES_PER_PAGE - 1)) ? ENTRIES_PER_PAGE : ENTRIES_PER_PAGE - (gameSelected-gameStart) - 1);
/* HOME button */
if (buttons & WPAD_BUTTON_HOME)
Restart();
#ifndef SIMPLE_MODE
/* PLUS (+) button */
if (buttons & WPAD_BUTTON_PLUS)
Menu_Install();
/* MINUS (-) button */
if (buttons & WPAD_BUTTON_MINUS)
Menu_Remove();
#endif
/* A button */
if (buttons & WPAD_BUTTON_A)
Menu_Boot();
}
void Menu_Format(void)
{
partitionEntry partitions[MAX_PARTITIONS];
u32 cnt, sector_size;
s32 ret, selected = 0;
/* Clear console */
Con_Clear();
/* Get partition entries */
ret = Partition_GetEntries(partitions, §or_size);
if (ret < 0) {
printf("[+] ERROR: No se han encontrado particiones! (ret = %d)\n", ret);
/* Restart */
Restart_Wait();
}
loop:
/* Clear console */
Con_Clear();
printf("[+] Escoge la particion que quieres \n");
printf(" formatear:\n\n");
/* Print partition list */
for (cnt = 0; cnt < MAX_PARTITIONS; cnt++) {
partitionEntry *entry = &partitions[cnt];
/* Calculate size in gigabytes */
f32 size = entry->size * (sector_size / GB_SIZE);
/* Selected entry */
(selected == cnt) ? printf(">> ") : printf(" ");
fflush(stdout);
/* Valid partition */
if (size)
printf("Partition #%d: (tamaño = %.2fGB)\n", cnt + 1, size);
else
printf("Partition #%d: (no puede formatearse)\n", cnt + 1);
}
partitionEntry *entry = &partitions[selected];
u32 buttons = Wpad_WaitButtons();
/* UP/DOWN buttons */
if (buttons & WPAD_BUTTON_UP) {
if ((--selected) <= -1)
selected = MAX_PARTITIONS - 1;
}
if (buttons & WPAD_BUTTON_DOWN) {
if ((++selected) >= MAX_PARTITIONS)
selected = 0;
}
/* B button */
if (buttons & WPAD_BUTTON_B)
return;
/* Valid partition */
if (entry->size) {
/* A button */
if (buttons & WPAD_BUTTON_A)
goto format;
}
goto loop;
format:
/* Clear console */
Con_Clear();
printf("[+] Estas seguro que desear formatear\n");
printf(" esta particion?\n\n");
printf(" Partition #%d\n", selected + 1);
printf(" (tamaño = %.2fGB - type: %02X)\n\n", entry->size * (sector_size / GB_SIZE), entry->type);
printf(" Presiona el boton A para continuar.\n");
printf(" Presiona el boton B para volver.\n\n\n");
/* Wait for user answer */
for (;;) {
u32 buttons = Wpad_WaitButtons();
/* A button */
if (buttons & WPAD_BUTTON_A)
break;
/* B button */
if (buttons & WPAD_BUTTON_B)
goto loop;
}
printf("[+] Formateando, por favor espere...");
fflush(stdout);
/* Format partition */
ret = WBFS_Format(entry->sector, entry->size);
if (ret < 0) {
printf("\n ERROR! (ret = %d)\n", ret);
goto out;
} else
printf(" OK!\n");
out:
printf("\n");
printf(" Presiona cualquier tecla para continuar...\n");
/* Wait for any button */
Wpad_WaitButtons();
}
void Menu_Install(void)
{
static struct discHdr header ATTRIBUTE_ALIGN(32);
s32 ret;
/* Clear console */
Con_Clear();
printf("[+] Estas seguro que quieres instalar a\n");
printf(" un nuevo juego?\n\n");
printf(" Presiona el boton A para continuar.\n");
printf(" Presiona el boton B para volver.\n\n\n");
/* Wait for user answer */
for (;;) {
u32 buttons = Wpad_WaitButtons();
/* A button */
if (buttons & WPAD_BUTTON_A)
break;
/* B button */
if (buttons & WPAD_BUTTON_B)
return;
}
/* Disable USB mode */
Disc_SetUSB(NULL);
printf("[+] Inserta el DVD del juego...");
fflush(stdout);
/* Wait for disc */
ret = Disc_Wait();
if (ret < 0) {
printf("\n ERROR! (ret = %d)\n", ret);
goto out;
} else
printf(" OK!\n");
printf("[+] Cargando el disco DVD...");
fflush(stdout);
/* Open disc */
ret = Disc_Open();
if (ret < 0) {
printf("\n ERROR! (ret = %d)\n", ret);
goto out;
} else
printf(" OK!\n\n");
/* Check disc */
ret = Disc_IsWii();
if (ret < 0) {
printf("[+] ERROR: No es un disco de WII!!\n");
goto out;
}
/* Read header */
Disc_ReadHeader(&header);
/* Check if game is already installed */
ret = WBFS_CheckGame(header.id);
if (ret) {
printf("[+] ERROR: El juego ya esta instalado!!\n");
goto out;
}
printf("[+] Instalando el juego, por favor espere...\n\n");
printf(" %s\n", header.title);
printf(" (%c%c%c%c)\n\n", header.id[0], header.id[1], header.id[2], header.id[3]);
/* Install game */
ret = WBFS_AddGame();
if (ret < 0) {
printf("[+] ERROR en la instalacion! (ret = %d)\n", ret);
goto out;
}
/* Reload entries */
__Menu_GetEntries();
out:
printf("\n");
printf(" Presione cualquier tecla para continuar...\n");
/* Wait for any button */
Wpad_WaitButtons();
}
void Menu_Remove(void)
{
struct discHdr *header = NULL;
s32 ret;
/* No game list */
if (!gameCnt)
return;
/* Selected game */
header = &gameList[gameSelected];
/* Clear console */
Con_Clear();
printf("[+] Estas seguro que deseas eliminar\n");
printf(" este juego?\n\n");
/* Show game info */
__Menu_PrintInfo(header);
printf(" Presiona el boton A para continuar.\n");
printf(" Presiona el boton B para volver.\n\n\n");
/* Wait for user answer */
for (;;) {
u32 buttons = Wpad_WaitButtons();
/* A button */
if (buttons & WPAD_BUTTON_A)
break;
/* B button */
if (buttons & WPAD_BUTTON_B)
return;
}
printf("[+] Eliminando el juego, por favor espere...");
fflush(stdout);
/* Remove game */
ret = WBFS_RemoveGame(header->id);
if (ret < 0) {
printf("\n ERROR! (ret = %d)\n", ret);
goto out;
} else
printf(" OK!\n");
/* Reload entries */
__Menu_GetEntries();
out:
printf("\n");
printf(" Presiona cualquier tecla para continuar...\n");
/* Wait for any button */
Wpad_WaitButtons();
}
void Menu_Boot(void)
{
struct discHdr *header = NULL;
s32 ret;
/* No game list */
if (!gameCnt)
return;
/* Selected game */
header = &gameList[gameSelected];
/* Clear console */
Con_Clear();
#ifdef SIMPLE_MODE
printf("\n");
/* Show game info */
__Menu_PrintInfo(header);
printf("\n\n");
#else
printf("[+] Estas seguro de cargar este juego?\n");
printf(" este juego?\n\n");
/* Show game info */
__Menu_PrintInfo(header);
printf(" Presiona el boton A para continuar.\n");
printf(" Presiona el boton B para volver.\n\n\n");
/* Wait for user answer */
for (;;) {
u32 buttons = Wpad_WaitButtons();
/* A button */
if (buttons & WPAD_BUTTON_A)
break;
/* B button */
if (buttons & WPAD_BUTTON_B)
return;
}
#endif
printf("[+] Ejecutando el juego de Wii, por favor espere...\n");
/* Set USB mode */
Disc_SetUSB(header->id);
/* Open disc */
ret = Disc_Open();
if (ret < 0) {
printf(" ERROR: No se a podido ejecutar el juego! (ret = %d)\n", ret);
goto out;
}
/* Boot Wii disc */
Disc_WiiBoot();
printf(" Returned! (ret = %d)\n", ret);
out:
printf("\n");
printf(" Presiona cualquier tecla para continuar...\n");
/* Wait for button */
Wpad_WaitButtons();
}
void Menu_Loop(void)
{
s32 ret;
/* Open USB device */
ret = WBFS_Open();
/* Show warning */
if (ret < 0) {
/* Clear console */
Con_Clear();
printf("[+] ERROR:\n\n");
printf(" no se ha encontrado particion WBFS!\n");
printf(" Necesitas crear una.\n\n");
#ifndef SIMPLE_MODE
printf(" Presiona el boton A para formatear una particion.\n");
#endif
printf(" Presiona el boton B para reiniciar.\n\n");
/* Wait for user answer */
for (;;) {
u32 buttons = Wpad_WaitButtons();
#ifndef SIMPLE_MODE
/* A button */
if (buttons & WPAD_BUTTON_A)
break;
#endif
/* B button */
if (buttons & WPAD_BUTTON_B)
Restart();
}
#ifndef SIMPLE_MODE
/* Format device */
Menu_Format();
/* Reopen USB device */
WBFS_Open();
#endif
}
/* Get game list */
__Menu_GetEntries();
/* Menu loop */
for (;;) {
f32 free, used;
/* Clear console */
Con_Clear();
/* Get free space */
WBFS_DiskSpace(&used, &free);
printf("[+] Escoje el juego que quieres ejecutar:\n\n");
/* Print game list */
__Menu_PrintEntries();
printf("[+] Esp. Usado: %.2fGB, Libre: %.2fGB", used, free);
/* Controls */
__Menu_Controls();
}
}