Difference between revisions of "User:Cboomf"
Jump to navigation
Jump to search
(New page: 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. ===Code du...) |
|||
Line 22: | Line 22: | ||
#include "stm.c" | #include "stm.c" | ||
#include "es.h" | #include "es.h" | ||
+ | #include "es.c" | ||
+ | #include "ipc.h" | ||
+ | #include "gu.c" | ||
+ | |||
+ | #include "GRRLIB.h" | ||
#include "../gfx/music.h" | #include "../gfx/music.h" | ||
typedef void (*Loader_Entry)(void); | typedef void (*Loader_Entry)(void); | ||
− | static u32 * | + | static u32 *xjb; |
Loader_Entry loader = (Loader_Entry)0x80001800; | Loader_Entry loader = (Loader_Entry)0x80001800; | ||
− | void | + | extern u16 *GRRLIB_buffer; |
+ | |||
+ | void hello(void) | ||
{ | { | ||
− | + | printf("Hello world!\n"); | |
− | + | printf("v 0.3"); | |
− | |||
} | } | ||
Line 41: | Line 47: | ||
printf("Menu\n"); | printf("Menu\n"); | ||
printf("----\n"); | printf("----\n"); | ||
− | printf("Start + Z | + | printf("Start + Z = Return to loader\n"); |
printf("A !! = Elf Loader\n"); | printf("A !! = Elf Loader\n"); | ||
printf("B !! = System Utils\n"); | printf("B !! = System Utils\n"); | ||
printf("Y ! = Fun\n"); | printf("Y ! = Fun\n"); | ||
− | printf("X | + | printf("X = Reboot Wii\n"); |
return; | return; | ||
+ | } | ||
+ | |||
+ | void clearscreen(void) | ||
+ | { | ||
+ | int y; | ||
+ | for(y=0;y<34;y++) | ||
+ | printf(" \n"); | ||
} | } | ||
Line 55: | Line 68: | ||
loader(); | loader(); | ||
} | } | ||
+ | } | ||
+ | |||
+ | void console(void) { | ||
+ | xfb = MEM_K0_TO_K1(SYS_AllocateFramebuffer(rmode)); | ||
+ | xjb = MEM_K0_TO_K1(SYS_AllocateFramebuffer(rmode)); | ||
+ | console_init(xfb,20,20,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(); | ||
} | } | ||
Line 87: | Line 113: | ||
} | } | ||
return; | return; | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
} | } | ||
void shutdown(void) { | void shutdown(void) { | ||
− | + | __STM_Init(); | |
− | + | STM_RebootSystem(); | |
− | + | __STM_Close(); | |
− | |||
− | |||
− | |||
− | |||
− | |||
} | } | ||
void fun(void) { | void fun(void) { | ||
+ | |||
+ | clearscreen(); | ||
+ | __STM_Init(); | ||
+ | |||
printf("FUN\n"); | printf("FUN\n"); | ||
+ | printf("---\n\n"); | ||
int ver; | int ver; | ||
int revma; | int revma; | ||
int revmi; | int revmi; | ||
+ | int di_fd; | ||
+ | int es_fd; | ||
+ | int vec; | ||
+ | u32 wiiid; | ||
+ | static u8 stm_inbuf[0x20] ATTRIBUTE_ALIGN(32); | ||
+ | static u8 stm_iobuf[0x20] ATTRIBUTE_ALIGN(32); | ||
ver=IOS_GetVersion(); | ver=IOS_GetVersion(); | ||
Line 117: | Line 143: | ||
revmi=IOS_GetRevisionMinor(); | revmi=IOS_GetRevisionMinor(); | ||
printf("IOS Version : %d Revision : %d.%d \n\n", ver, revma, revmi); | 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); | ||
+ | |||
+ | vec=0; | ||
+ | es_fd=IOS_Open("/dev/es",1); | ||
+ | vec = ES_GetDeviceID(&wiiid); | ||
+ | // printf("Console ID : %08x \n\n", wiiid); | ||
+ | IOS_Close(es_fd); | ||
+ | |||
+ | GRRLIB_DrawImg(10,50, music_width, music_high, music_img); | ||
+ | GRRLIB_Render(); | ||
printf("Press A to continue\n"); | printf("Press A to continue\n"); | ||
Line 124: | Line 166: | ||
int buttonsDown = PAD_ButtonsHeld(0); | int buttonsDown = PAD_ButtonsHeld(0); | ||
if (buttonsDown & PAD_BUTTON_A){ | if (buttonsDown & PAD_BUTTON_A){ | ||
+ | console(); | ||
clearscreen(); | clearscreen(); | ||
menutext(); | menutext(); | ||
+ | __STM_Close(); | ||
return; | return; | ||
} | } | ||
Line 143: | Line 187: | ||
} | } | ||
if (buttonsDown & PAD_BUTTON_X){ | if (buttonsDown & PAD_BUTTON_X){ | ||
− | + | shutdown(); | |
} | } | ||
if (buttonsDown & PAD_BUTTON_B){ | if (buttonsDown & PAD_BUTTON_B){ | ||
Line 170: | Line 214: | ||
****************************************************************************/ | ****************************************************************************/ | ||
+ | GRRLIB_buffer=(u16 *)malloc(640*240*2); | ||
+ | |||
VIDEO_Init(); | VIDEO_Init(); | ||
PAD_Init(); | PAD_Init(); | ||
+ | |||
+ | GRRLIB_InitVideo(); | ||
+ | GRRLIB_Start(); | ||
+ | GRRLIB_FillScreen(0x0000); | ||
+ | GRRLIB_Render(); | ||
switch(VIDEO_GetCurrentTvMode()) { | switch(VIDEO_GetCurrentTvMode()) { | ||
Line 189: | Line 240: | ||
xfb = MEM_K0_TO_K1(SYS_AllocateFramebuffer(rmode)); | xfb = MEM_K0_TO_K1(SYS_AllocateFramebuffer(rmode)); | ||
− | + | xjb = MEM_K0_TO_K1(SYS_AllocateFramebuffer(rmode)); | |
console_init(xfb,20,20,rmode->fbWidth,rmode->xfbHeight,rmode->fbWidth*VI_DISPLAY_PIX_SZ); | console_init(xfb,20,20,rmode->fbWidth,rmode->xfbHeight,rmode->fbWidth*VI_DISPLAY_PIX_SZ); | ||
Line 205: | Line 256: | ||
hello(); | hello(); | ||
printf("\n"); | printf("\n"); | ||
− | printf("My first native wii homebrew\n"); | + | printf("My first native wii homebrew\n\n"); |
− | printf("\n"); | + | printf("Press Start :-)\n\n"); |
while(1) { | while(1) { | ||
Line 215: | Line 266: | ||
return 0; | return 0; | ||
} | } | ||
+ | |||
</source> | </source> |
Revision as of 12:06, 19 April 2008
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.
Code dump :
#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>
static void *xfb = NULL;
static GXRModeObj *rmode = NULL;
#include "ios.c"
#include "stm.c"
#include "es.h"
#include "es.c"
#include "ipc.h"
#include "gu.c"
#include "GRRLIB.h"
#include "../gfx/music.h"
typedef void (*Loader_Entry)(void);
static u32 *xjb;
Loader_Entry loader = (Loader_Entry)0x80001800;
extern u16 *GRRLIB_buffer;
void hello(void)
{
printf("Hello world!\n");
printf("v 0.3");
}
void menutext(void)
{
printf("Menu\n");
printf("----\n");
printf("Start + Z = Return to loader\n");
printf("A !! = Elf Loader\n");
printf("B !! = System Utils\n");
printf("Y ! = Fun\n");
printf("X = Reboot Wii\n");
return;
}
void clearscreen(void)
{
int y;
for(y=0;y<34;y++)
printf(" \n");
}
void checkAndReload(void) {
PAD_ScanPads();
int buttonsDown = PAD_ButtonsHeld(0);
if( (buttonsDown & PAD_TRIGGER_Z) && (buttonsDown & PAD_BUTTON_START)) {
loader();
}
}
void console(void) {
xfb = MEM_K0_TO_K1(SYS_AllocateFramebuffer(rmode));
xjb = MEM_K0_TO_K1(SYS_AllocateFramebuffer(rmode));
console_init(xfb,20,20,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) {
bool pressed;
pressed=false;
clearscreen();
printf("System Utils Menu\n");
printf("-----------------\n\n");
printf("X = Load IOS37\n");
printf("Y = Load IOS9\n");
printf("B = Go Back\n");
printf("Press A to continue \n");
while((pressed=false)) {
VIDEO_WaitVSync();
PAD_ScanPads();
int buttonsDown = PAD_ButtonsHeld(0);
if (buttonsDown & PAD_BUTTON_X){
__IOS_LaunchNewIOS(37);
pressed=true;
}
if (buttonsDown & PAD_BUTTON_Y){
IOS_ReloadIOS(9);
pressed=true;
}
if (buttonsDown & PAD_BUTTON_B){
pressed=true;
}
}
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;
int es_fd;
int vec;
u32 wiiid;
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);
vec=0;
es_fd=IOS_Open("/dev/es",1);
vec = ES_GetDeviceID(&wiiid);
// printf("Console ID : %08x \n\n", wiiid);
IOS_Close(es_fd);
GRRLIB_DrawImg(10,50, music_width, music_high, music_img);
GRRLIB_Render();
printf("Press A to continue\n");
while(1) {
VIDEO_WaitVSync();
PAD_ScanPads();
int buttonsDown = PAD_ButtonsHeld(0);
if (buttonsDown & PAD_BUTTON_A){
console();
clearscreen();
menutext();
__STM_Close();
return;
}
}
}
void menu(void) {
clearscreen();
menutext();
while(1) {
VIDEO_WaitVSync();
checkAndReload();
PAD_ScanPads();
int buttonsDown = PAD_ButtonsHeld(0);
if (buttonsDown & PAD_BUTTON_Y){
fun();
}
if (buttonsDown & PAD_BUTTON_X){
shutdown();
}
if (buttonsDown & PAD_BUTTON_B){
//sysutils();
}
if (buttonsDown & PAD_BUTTON_A){
//elfloader();
}
}
}
void start(void) {
PAD_ScanPads();
int buttonsDown = PAD_ButtonsHeld(0);
if(buttonsDown & PAD_BUTTON_START) {
menu();
}
}
int main(int argc, char **argv) {
/****************************************************************************
Initialise Video
Initialise GCPad for input
****************************************************************************/
GRRLIB_buffer=(u16 *)malloc(640*240*2);
VIDEO_Init();
PAD_Init();
GRRLIB_InitVideo();
GRRLIB_Start();
GRRLIB_FillScreen(0x0000);
GRRLIB_Render();
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;
}
xfb = MEM_K0_TO_K1(SYS_AllocateFramebuffer(rmode));
xjb = MEM_K0_TO_K1(SYS_AllocateFramebuffer(rmode));
console_init(xfb,20,20,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();
/****************************************************************************
Main code
****************************************************************************/
hello();
printf("\n");
printf("My first native wii homebrew\n\n");
printf("Press Start :-)\n\n");
while(1) {
VIDEO_WaitVSync();
start();
}
return 0;
}