Line 12: |
Line 12: |
| | | |
| I am currently coding ( attempting ;-) ) a package of seemingly random bits of code that may server a purpose, may not but, it is just to learn C and have some fun with my wii. | | I am currently coding ( attempting ;-) ) a package of seemingly random bits of code that may server a purpose, may not but, it is just to learn C and have some fun with my wii. |
− |
| |
− | If someone can improve it put any improvements in the Updates section at the bottom ;-)
| |
− |
| |
− | ===Code dump : ===
| |
− |
| |
− | <source lang="c">
| |
− | #include <stdio.h>
| |
− | #include <stdlib.h>
| |
− | #include <string.h>
| |
− | #include <malloc.h>
| |
− | #include <ogcsys.h>
| |
− | #include <gccore.h>
| |
− | #include <ogc/ipc.h>
| |
− | #include <stdarg.h>
| |
− | #include <ctype.h>
| |
− | #include <unistd.h>
| |
− | #include <assert.h>
| |
− | #include <ogc/ios.h>
| |
− | #include <ogc/stm.h>
| |
− | #include <ogc/es.h>
| |
− | #include <ogc/gu.h>
| |
− | #include <ogc/usb.h>
| |
− | #include <bte/bte.h>
| |
− |
| |
− | static void *xfb = NULL;
| |
− | static GXRModeObj *rmode = NULL;
| |
− |
| |
− | #define USB_ALIGN __attribute__ ((aligned(32)))
| |
− |
| |
− | #define MAX_WIIMOTES 4
| |
− |
| |
− | #include "GRRLIB.h"
| |
− |
| |
− | #include "wiiuse.h"
| |
− |
| |
− | #include "../gfx/music.h"
| |
− | #include "../gfx/cursor.h"
| |
− | #include "../gfx/impact.h"
| |
− |
| |
− | typedef void (*Loader_Entry)(void);
| |
− | static u32 *xjb;
| |
− |
| |
− | wiimote** wiimotes;
| |
− |
| |
− | Loader_Entry loader = (Loader_Entry)0x80001800;
| |
− |
| |
− | extern u16 *GRRLIB_buffer;
| |
− | unsigned int buttonA=0;
| |
− | unsigned int buttonB=0;
| |
− | unsigned int buttonUp=0;
| |
− | unsigned int buttonDown=0;
| |
− | unsigned int buttonLeft=0;
| |
− | unsigned int buttonRight=0;
| |
− | unsigned int buttonPlus=0;
| |
− | unsigned int buttonMinus=0;
| |
− | unsigned int buttonHome=0;
| |
− | unsigned int buttonOne=0;
| |
− | unsigned int buttonTwo=0;
| |
− | unsigned int rumble=0;
| |
− | unsigned int irx=0,iry=0;
| |
− |
| |
− | void wiimote_event(struct wiimote_t* wm, int event)
| |
− | {
| |
− | wiiuse_rumble(wiimotes[0], rumble);
| |
− | switch (event) {
| |
− | case WIIUSE_EVENT:
| |
− |
| |
− | buttonB=0;
| |
− | buttonA=0;
| |
− | buttonUp=0;
| |
− | buttonDown=0;
| |
− | buttonLeft=0;
| |
− | buttonRight=0;
| |
− | buttonPlus=0;
| |
− | buttonMinus=0;
| |
− | buttonHome=0;
| |
− | buttonOne=0;
| |
− | buttonTwo=0;
| |
− |
| |
− | if (IS_PRESSED(wm, WIIMOTE_BUTTON_B))
| |
− | buttonB=1;
| |
− |
| |
− | if (IS_PRESSED(wm, WIIMOTE_BUTTON_A))
| |
− | buttonA=1;
| |
− |
| |
− | if (IS_PRESSED(wm, WIIMOTE_BUTTON_UP))
| |
− | buttonUp=1;
| |
− |
| |
− | if (IS_PRESSED(wm, WIIMOTE_BUTTON_DOWN))
| |
− | buttonDown=1;
| |
− |
| |
− | if (IS_PRESSED(wm, WIIMOTE_BUTTON_LEFT))
| |
− | buttonLeft=1;
| |
− |
| |
− | if (IS_PRESSED(wm, WIIMOTE_BUTTON_RIGHT))
| |
− | buttonRight=1;
| |
− |
| |
− | if (IS_PRESSED(wm, WIIMOTE_BUTTON_HOME))
| |
− | buttonHome=1;
| |
− |
| |
− | if (IS_PRESSED(wm, WIIMOTE_BUTTON_ONE))
| |
− | buttonOne=1;
| |
− |
| |
− | if (IS_PRESSED(wm, WIIMOTE_BUTTON_TWO))
| |
− | buttonTwo=1;
| |
− |
| |
− | if (IS_PRESSED(wm, WIIMOTE_BUTTON_PLUS))
| |
− | buttonPlus=1;
| |
− |
| |
− | if ( IS_PRESSED(wm, WIIMOTE_BUTTON_MINUS))
| |
− | buttonMinus=1;
| |
− |
| |
− | break;
| |
− |
| |
− | default:
| |
− | break;
| |
− | }
| |
− |
| |
− | }
| |
− |
| |
− | void hello(void)
| |
− | {
| |
− | printf(" Hello world!\n");
| |
− | printf(" v 0.45");
| |
− | }
| |
− |
| |
− | void menutext(void)
| |
− | {
| |
− | printf(" Menu\n");
| |
− | printf(" ----\n");
| |
− | printf(" Home = Return to loader\n");
| |
− | printf(" Up !! = Elf Loader\n");
| |
− | printf(" Down !! = System Utils\n");
| |
− | printf(" Left ! = Fun\n");
| |
− | printf(" Right = Reboot Wii\n");
| |
− | return;
| |
− | }
| |
− |
| |
− | void clearscreen(void)
| |
− | {
| |
− | int y;
| |
− | for(y=0;y<34;y++)
| |
− | printf(" \n");
| |
− | }
| |
− |
| |
− | void checkAndReload(void) {
| |
− | if((buttonHome==1)){
| |
− | loader();
| |
− | }
| |
− | }
| |
− |
| |
− | void console(void) {
| |
− | xfb = MEM_K0_TO_K1(SYS_AllocateFramebuffer(rmode));
| |
− | xjb = MEM_K0_TO_K1(SYS_AllocateFramebuffer(rmode));
| |
− | CON_Init(xfb,20,120,rmode->fbWidth,rmode->xfbHeight,rmode->fbWidth*VI_DISPLAY_PIX_SZ);
| |
− |
| |
− | VIDEO_Configure(rmode);
| |
− | VIDEO_SetNextFramebuffer(xfb);
| |
− | VIDEO_SetBlack(FALSE);
| |
− | VIDEO_Flush();
| |
− | VIDEO_WaitVSync();
| |
− | if(rmode->viTVMode&VI_NON_INTERLACE) VIDEO_WaitVSync();
| |
− | }
| |
− |
| |
− | void sysutils(void) {
| |
− | return;
| |
− | }
| |
− |
| |
− | void shutdown(void) {
| |
− | __STM_Init();
| |
− | STM_RebootSystem();
| |
− | __STM_Close();
| |
− | }
| |
− |
| |
− | void fun(void) {
| |
− |
| |
− | clearscreen();
| |
− | __STM_Init();
| |
− |
| |
− | printf(" FUN\n");
| |
− | printf(" ---\n\n");
| |
− |
| |
− | int ver;
| |
− | int revma;
| |
− | int revmi;
| |
− | int di_fd;
| |
− | static u8 stm_inbuf[0x20] ATTRIBUTE_ALIGN(32);
| |
− | static u8 stm_iobuf[0x20] ATTRIBUTE_ALIGN(32);
| |
− |
| |
− | ver=IOS_GetVersion();
| |
− | revma=IOS_GetRevisionMajor();
| |
− | revmi=IOS_GetRevisionMinor();
| |
− | printf(" IOS Version : %d Revision : %d.%d \n\n", ver, revma, revmi);
| |
− |
| |
− |
| |
− | di_fd=IOS_Open("/dev/di",1);
| |
− | ((u32*)stm_inbuf)[0x00] = 0x70000000;
| |
− | IOS_Ioctl( di_fd, stm_inbuf[0x00], stm_inbuf, 0x20, stm_iobuf, 0x20);
| |
− | printf(" DVD ID : %s \n\n",stm_iobuf);
| |
− | IOS_Close(di_fd);
| |
− |
| |
− | //GRRLIB_DrawImg(10,50, music_width, music_high, music_img, 0, 1);
| |
− | //GRRLIB_Render();
| |
− |
| |
− | printf(" Press + to rumble\n");
| |
− | printf(" Press - to stop\n\n");
| |
− |
| |
− | printf(" Press A to continue\n");
| |
− | while(1) {
| |
− | VIDEO_WaitVSync();
| |
− | if ((buttonA==1)){
| |
− | console();
| |
− | clearscreen();
| |
− | menutext();
| |
− | __STM_Close();
| |
− | return;
| |
− | }
| |
− | if ((buttonPlus==1)){
| |
− | rumble=1;
| |
− | }
| |
− | if ((buttonMinus==1)){
| |
− | rumble=0;
| |
− | }
| |
− | }
| |
− | }
| |
− |
| |
− | void menu(void) {
| |
− | clearscreen();
| |
− | menutext();
| |
− | while(1) {
| |
− | VIDEO_WaitVSync();
| |
− | checkAndReload();
| |
− | if ((buttonLeft==1)){
| |
− | fun();
| |
− | }
| |
− | if ((buttonRight==1)){
| |
− | shutdown();
| |
− | }
| |
− | if ((buttonDown==1)){
| |
− | //sysutils();
| |
− | }
| |
− | if ((buttonUp==1)){
| |
− | //elfloader();
| |
− | }
| |
− | }
| |
− | }
| |
− |
| |
− |
| |
− | void start(void) {
| |
− | if((buttonB==1)) {
| |
− | menu();
| |
− | }
| |
− | }
| |
− |
| |
− | int main(int argc, char **argv) {
| |
− |
| |
− | /****************************************************************************
| |
− | Initialise Video
| |
− | Initialise GCPad for input
| |
− | ****************************************************************************/
| |
− |
| |
− | GRRLIB_buffer=(u16 *)malloc(640*240*2);
| |
− |
| |
− | VIDEO_Init();
| |
− | PAD_Init();
| |
− |
| |
− | //rmode = &TVPal528IntDf;
| |
− |
| |
− | switch(VIDEO_GetCurrentTvMode()) {
| |
− | case VI_NTSC:
| |
− | rmode = &TVNtsc480IntDf;
| |
− | break;
| |
− | case VI_PAL:
| |
− | rmode = &TVPal528IntDf;
| |
− | break;
| |
− | case VI_MPAL:
| |
− | rmode = &TVMpal480IntDf;
| |
− | break;
| |
− | default:
| |
− | rmode = &TVNtsc480IntDf;
| |
− | break;
| |
− | }
| |
− |
| |
− | console();
| |
− | if(rmode->viTVMode&VI_NON_INTERLACE) VIDEO_WaitVSync();
| |
− |
| |
− | printf(" Press 1&2\n\n");
| |
− |
| |
− | *((u32*)0xcd0000c0) |= 0x100;
| |
− | bte_init();
| |
− | bte_start();
| |
− | wiimotes = wiiuse_init(MAX_WIIMOTES,wiimote_event);
| |
− | wiiuse_find(wiimotes, MAX_WIIMOTES, 5);
| |
− | wiiuse_connect(wiimotes, MAX_WIIMOTES);
| |
− | wiiuse_set_leds(wiimotes[0], WIIMOTE_LED_1);
| |
− | wiiuse_rumble(wiimotes[0], 1);
| |
− | usleep(200000); /* 200ms */
| |
− | wiiuse_rumble(wiimotes[0], 0);
| |
− |
| |
− | clearscreen();
| |
− |
| |
− | GRRLIB_InitVideo();
| |
− | GRRLIB_Start();
| |
− | GRRLIB_FillScreen(0x0000);
| |
− | GRRLIB_Render();
| |
− |
| |
− | console();
| |
− |
| |
− | /****************************************************************************
| |
− | Main code
| |
− | ****************************************************************************/
| |
− |
| |
− | hello();
| |
− | printf("\n");
| |
− | printf(" My first native wii homebrew\n\n");
| |
− | printf(" Press B :-)\n\n");
| |
− |
| |
− | while(1) {
| |
− | VIDEO_WaitVSync();
| |
− | start();
| |
− | }
| |
− |
| |
− | return 0;
| |
− | }
| |
− |
| |
− |
| |
− |
| |
− | </source>
| |
− |
| |
− | == Updates ==
| |
− |
| |
− | These may be updates/fixes for the code above
| |
− | * I was able to compile your code. I think you need the most recent cvs of the libogc use Drack's guide
| |
− | http://www.tehskeen.com/forums/showthread.php?t=2968
| |
− | ** Thanks for that now i just have an error about usb functions in libbte
| |
− | Also you should not include .c files in the header.
| |
− | <source lang="c">
| |
− |
| |
− | </source>
| |