Control de usuario
Patrocinadores
Estadísticas
Miembros:
334.591
Online:
961
Hilos:
1.380.512
Mensajes:
24.879.226
Stats

Índice de foros Wii Scene

[Ejemplo explicado]Hello World[Semi-tutorial]

Foro dedicado al software casero y los diferentes hacks no relacionados con backups

Moderadores: jamonazo2000, comepiedras

Rigle
Avatar de usuario
大グレン団
 
Mensajes: 5767
Registrado: 10 Nov 2007
Ubicación: Kamina City

[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
Sobremesa: Intel Quad 2 Core Q8200 2,33 Ghz || Nvidia GeForce 9800 GT || 4 GB RAM || 320 HDD
Netbook: AMD Athlon L110 1,2 Ghz @1,43 Ghz OC || ATI Xpress 1270 128 Mbs || 2 GB RAM || 250 GB HDD
Portatil: ASUS K52J: I5-520 || ATI 5470 @1GB || 4GB RAM || 500GB HDD
Consolas: Gameboy Pocket (x3), Gameboy Advance, Gameboy Advance SP, Gameboy Micro, Nintendo Ds, Nintendo Ds Lite (x2), Nintendo DSi, Nintendo Gamecube, Wii, PSP Slim 2004

Rigle ©2004-2012

TheFireRed
Avatar de usuario
Ace Translator
 
Mensajes: 1434
Registrado: 24 Oct 2006
Ubicación: Ciudad Real
Fotos: 2

Mensajepor TheFireRed 10 Jun 2008 22:32

¡¡Gran trabajo, Rigle!!

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

alexpowerup
Avatar de usuario
POMF =3
 
Mensajes: 781
Registrado: 22 Sep 2007
Ubicación: 0x61A3551C

Mensajepor alexpowerup 10 Jun 2008 22:40

¿Es homebrew de GameCube o de Wii?
Imagen Imagen
Be rational, be powerful.


Rigle
Avatar de usuario
大グレン団
 
Mensajes: 5767
Registrado: 10 Nov 2007
Ubicación: Kamina City

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
Sobremesa: Intel Quad 2 Core Q8200 2,33 Ghz || Nvidia GeForce 9800 GT || 4 GB RAM || 320 HDD
Netbook: AMD Athlon L110 1,2 Ghz @1,43 Ghz OC || ATI Xpress 1270 128 Mbs || 2 GB RAM || 250 GB HDD
Portatil: ASUS K52J: I5-520 || ATI 5470 @1GB || 4GB RAM || 500GB HDD
Consolas: Gameboy Pocket (x3), Gameboy Advance, Gameboy Advance SP, Gameboy Micro, Nintendo Ds, Nintendo Ds Lite (x2), Nintendo DSi, Nintendo Gamecube, Wii, PSP Slim 2004

Rigle ©2004-2012

MollyPGR
Avatar de usuario
Adicto
 
Mensajes: 287
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.

Danielc
Avatar de usuario
MiiConsola.com
 
Mensajes: 2508
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...
¿Quieres dejar tu consola lo mejor posible? Visita mi tutorial para actualizar a la 4.1 sin perder nada.

Moki_X
Avatar de usuario
Pan duro
 
Mensajes: 2986
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
Más perdido que un pulpo en un garaje.

Veatsealor
Avatar de usuario
Adicto
 
Mensajes: 473
Registrado: 02 Sep 2007
Ubicación: Madrid

Mensajepor Veatsealor 11 Jun 2008 00:05

gracias, mañana intentare ahcer algunas cosillas xDD

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
MegaAdicto!!!
 
Mensajes: 948
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 0 invitados