Control de usuario
Patrocinadores
Estadísticas
Miembros:
177.730
Online:
1.860
Hilos:
929.163
Mensajes:
13.162.981
Stats

Índice de foros Wii Scene

[Ejemplo explicado]Hello World[Semi-tutorial]

Homebrew, hacks, exploits y el resto de la scene de Wii

Moderadores: jiXo, jamonazo2000

Rigle
Avatar de usuario
Buitre #1 de Pruebas
 
Mensajes: 2371
Registrado: 10 Nov 2007
Ubicación: Quiensabe... Novia: No =D
Fotos: 2

[Ejemplo explicado]Hello World[Semi-tutorial]

Mensajepor Rigle 10 Jun 2008 22:25

Pues , como no veo mucha información sobre la liboGC (al menos en español), pues he decidido que qué menos que aprendamos ha hacer un Hello World explicando lo que hace cada función.

A partir de este ejemplo, puedes poner texto en la wii [ginyo]

Código: Seleccionar todo
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <malloc.h>
#include <ogcsys.h>
#include <gccore.h>
#include <wiiuse/wpad.h>

//incluimos librerias

static void *xfb = NULL;
static GXRModeObj *rmode = NULL;

int main(int argc, char **argv) {//iniciamos la función "main()"

   VIDEO_Init();//Iniciamos el video
   PAD_Init();//Iniciamos el pad
   WPAD_Init();//Iniciamos wiimote
   
   
   rmode = VIDEO_GetPreferredMode(NULL);//Esto recibe el tipo de "monitor" y la configuración que tienes en la wii

   xfb = MEM_K0_TO_K1(SYS_AllocateFramebuffer(rmode));//Inicia el buffer


   CON_InitEx(rmode, 20,30,rmode->fbWidth-40,rmode->xfbHeight-60);//Inicia el modo consola

   VIDEO_ClearFrameBuffer(rmode,xfb,COLOR_WHITE);//Borde de la pantalla, color blanco
   VIDEO_Configure(rmode);//Le dices a la consola que modo de vídeo que usar y la pantalla se configura según esto
   VIDEO_SetNextFramebuffer(xfb);//Le dices donde guardar el siguiente buffer
   VIDEO_SetBlack(FALSE);//Sirve para poner pantalla en negro
   VIDEO_Flush();//Vaciamos el buffer
   VIDEO_WaitVSync();

   if(rmode->viTVMode&VI_NON_INTERLACE) VIDEO_WaitVSync();
   
                            /*TEXTO*/
                   
                   
    printf(" \n\n");//2 saltos de línea
   
   printf("Hola mundo!\n");/*ponemos texto y un salto de línea para que lo lea.
La función printf no pone el texto en el monitor, lo almacena en el buffer y , con el salto de línea,
conseguimos que salga en ella*/
   printf(" \n\n");//2 saltos de línea

    printf("Hola mundo realizado por Rigle y explicado por el con ayuda de Waninkoko y marcan\n");
   printf("Gracias a Marcan y demas gente por la liboGC, que hacen posible el homebrew en wii\n");


   while(1) {

      WPAD_ScanPads();//Inicia el escaneo de wiimotes
      u32 pressed = WPAD_ButtonsDown(0);
      if ( pressed & WPAD_BUTTON_HOME ) exit(0);//Si se pulsa el botón home se vuelve al menu de la wii
      VIDEO_WaitVSync();//Esperamos a que se haga un refresco de pantalla para comenzar el redibujado de pantalla
   }

   return 0;
}//Final del main


Dejo el pastie, para los que lo quieran ver mejor: http://pastie.org/212962

Agradezco a waninkoko su ayuda con las funciones desconocidas para mí y a marcan y demás por hacer una librería tan excelente.

Eso es todo. Espero que os guste.
[Ooooo] [Ooooo] [Ooooo] [Ooooo] [Ooooo] [Ooooo] [Ooooo] [Ooooo] [Ooooo] [Ooooo] [Ooooo] [Ooooo] [Ooooo]
Ultima edición por Rigle el 11 Jun 2008 20:46, editado 4 veces
¡Traducción del "The World Ends With You" al español! Imagen
Los hombres viven obsesionados por la inmensidad de lo eterno, por eso nos preguntamos:
'¿Tendrán ecos nuestros actos con el devenir de los siglos?,
¿recordarán nuestros nombres, los que no nos conocieron cuando ya no estemos?
¿Se preguntarán quiénes eramos, la valentía que demostramos en la batalla o lo apasionados que fuimos en el amor?



TheFireRed
Avatar de usuario
Alquimista de Acero
 
Mensajes: 1251
Registrado: 24 Oct 2006
Ubicación: Ciudad Real Novia: No :S
Fotos: 1

Mensajepor TheFireRed 10 Jun 2008 22:32

¡¡Gran trabajo, Rigle!!

Traducción de TWEWY, pAlib, ¡y ahora liboGC! XD
Imagen

alexpowerup
Avatar de usuario
Adicto
 
Mensajes: 447
Registrado: 22 Sep 2007
Ubicación: SPARTA!!11oneoneeleven

Mensajepor alexpowerup 10 Jun 2008 22:40

¿Es homebrew de GameCube o de Wii?
ImagenImagen

Rigle
Avatar de usuario
Buitre #1 de Pruebas
 
Mensajes: 2371
Registrado: 10 Nov 2007
Ubicación: Quiensabe... Novia: No =D
Fotos: 2

Mensajepor Rigle 10 Jun 2008 22:45

En teoría es de wii, pero no tengo metido ninguna libreria para wiimote, así que sería de GC, a mi parecer...
...pero intentaré meter con ayuda de un code que he visto de marcan el wiimote.(Espero que me deje...sino me las arreglaré para hacerlo lo más parecido, pero no igual)

EDIT: Me parece k e arreglado algo (gracias marcan)
Ultima edición por Rigle el 10 Jun 2008 22:54, editado 1 vez
¡Traducción del "The World Ends With You" al español! Imagen
Los hombres viven obsesionados por la inmensidad de lo eterno, por eso nos preguntamos:
'¿Tendrán ecos nuestros actos con el devenir de los siglos?,
¿recordarán nuestros nombres, los que no nos conocieron cuando ya no estemos?
¿Se preguntarán quiénes eramos, la valentía que demostramos en la batalla o lo apasionados que fuimos en el amor?



MollyPGR
Avatar de usuario
Adicto
 
Mensajes: 187
Registrado: 26 Mar 2007

Mensajepor MollyPGR 10 Jun 2008 22:54

Si tuviera tiempo, igual miraba de hacer algo, pero justo de exámenes no es plan.

Por lo que veo todo va sobre C, de eso se un poco... (programo DSPs) así que igual podría echarle un vistazo este verano si acabo la maldita carrera y el proyecto me deja tiempo.

Joer que me has picao! Así empecé con el Rat's life (concurso que hay de programar robots online, googlea) y acabé haciendo mi propia rata solo por ver que era capaz.

Saludotes.
Imagen

Danielc
Avatar de usuario
MegaAdicto!!!
 
Mensajes: 959
Registrado: 17 Abr 2008

Mensajepor Danielc 10 Jun 2008 23:29

Bueno, yo quiero tambien ayudar, y aunque no c mucho de esto, voy a incluir el ejemplo que viene con el ultimo devkit pro, que incluye el uso de librerias del wiimote..
Código: Seleccionar todo
#include <stdio.h>
#include <stdlib.h>
#include <gccore.h>
#include <wiiuse/wpad.h>

static void *xfb = NULL;
static GXRModeObj *rmode = NULL;

//---------------------------------------------------------------------------------
int main(int argc, char **argv) {
//---------------------------------------------------------------------------------

   // Inicializa el sistema de video
   VIDEO_Init();
   
   // Inicializa los mandos
   WPAD_Init();
   
   // Obtiene el modo de video preferido del sistema
   // Esto corresponde a las opciones en el system menu
   rmode = VIDEO_GetPreferredMode(NULL);

   // Asigna memoria para el display en la region no cacheada
   xfb = MEM_K0_TO_K1(SYS_AllocateFramebuffer(rmode));
   
   // Inicializa la consola. Requerida para printf
   console_init(xfb,20,20,rmode->fbWidth,rmode->xfbHeight,rmode->fbWidth*VI_DISPLAY_PIX_SZ);
   
   // Configura los registros de video con el modo escogido
   VIDEO_Configure(rmode);
   
   // Le dice al hardware de video donde esta nuestra display memory
   VIDEO_SetNextFramebuffer(xfb);
   
   // Hace el display visible
   VIDEO_SetBlack(FALSE);

   // Limpia los cambios del registro de cambios para el hardware ..??
   VIDEO_Flush();

   // Espera a la configuracion de video para completar
   VIDEO_WaitVSync();
   if(rmode->viTVMode&VI_NON_INTERLACE) VIDEO_WaitVSync();


   // La consola entiende los codigos de escape VT terminal ...?? Esta parte no la entiendo
   // Esto posiciona al cursor en la fila 2, columna 0
   // Podemos usar variables para este formato de codigos tambien..
   // e.g. printf ("\x1b[%d;%dH", row, column );
   printf("\x1b[2;0H");
   

   printf("Hello World!");

   while(1) {

      // Llamar la funcion WPAD_ScanPads cada lapso, esto lee los ultimos estados del control
      WPAD_ScanPads();

      // WPAD_ButtonsDown nos dice que botones fueron presionados en este lapso
      // Esto es un estado "one shot" el cual no arrancará hasta que el boton no sea soltado
      u32 pressed = WPAD_ButtonsDown(0);

      // Al presionar home, devuelve al homebrew channel o se sale de la aplicacion
      if ( pressed & WPAD_BUTTON_HOME ) exit(0);

      // Esperar al siguiente frame de pantalla...
      VIDEO_WaitVSync();
   }

   return 0;
}


Quiero aclarar que lo traducí a mano y segun lo que entendí cuando probé el ejemplo en mi wii..
A los comentarios que les puse "...??" me gustaria si me hicieran el favor de explicarmelos ya que no los entiendo...

Moki_X
Avatar de usuario
Pan duro
 
Mensajes: 2324
Registrado: 17 Mar 2003
Ubicación: Error 404

Mensajepor Moki_X 10 Jun 2008 23:35

Buff... si esto sigue así deberíamos ir pensando en abrir un foro de desarrollo exclusivamente para Wii xD
~

Veatsealor
Avatar de usuario
Adicto
 
Mensajes: 435
Registrado: 02 Sep 2007

Mensajepor Veatsealor 11 Jun 2008 00:05

gracias, mañana intentare ahcer algunas cosillas xDD
Alguien quiere un pack de caja pandora?? Preguntar por privado.

oyzzo
Avatar de usuario
Adicto
 
Mensajes: 114
Registrado: 22 Abr 2008
Ubicación: BCN

Mensajepor oyzzo 11 Jun 2008 03:54

DanielC valoro tu esfuerzo, pero preferiría que, en lugar de traducir los comentarios sin entender que hacen las funciones, te miraras y entendieras el código primero y luego lo explicaras con tus palabras, porque así aportarias algo :) Es una crítica amistosa [360º]

rodries
Avatar de usuario
Adicto
 
Mensajes: 157
Registrado: 31 May 2006

Mensajepor rodries 11 Jun 2008 08:04

Los codigos de escape VT terminal son codigos de escape que permite hacer goto del cursor o cambiar el color de la fuente o el background, el terminal VT normalmente VT100 es un estandar de consola que puedes ver por ejemplo en cualquier consola (terminal, shell) de linux o incluso en el hyperterminal de windows.

// e.g. printf ("\x1b[%d;%dH", row, column );
printf("\x1b[2;0H");
Esto hace un posicionamiento del cursor en la fila 2, columna 0

Siguiente

Volver a Scene

¿Quién está conectado?

Usuarios navegando por este foro: No hay usuarios registrados visitando el foro y 9 invitados