|
|
Line 1: |
Line 1: |
| I am a NERD ;-)
| | {{HomebrewPossiblyDangerous}} |
|
| |
|
| PC SPECS :-
| | {{Infobox homebrewapp |
| | | image = |
| | | title = [[Homebrew apps/Wii Web Server]] |
| | | desc = A web server running on wii |
| | | type = Server |
| | | author = Cboomf |
| | | download = [https://sourceforge.net/projects/wiiwebserver/ Project Page] |
| | | peripherals = {{Wiimote1}}{{WiFi}}{{Internet}}{{FrontSD}} |
| | | hbc=1 |
| | | hbb=1 |
| | }} |
|
| |
|
| 1: PIII 750MHz (over clocked to 800MHz), 64MB Dual Screen Graphics Card, 256MB Ram, 20GB Hard Drive, Win 98 + Ubuntu 7.10<br>
| | {{Infobox homebrewapp |
| 2: Celeron 1.2GHz, 16MB Graohics Card, 512 MB Ram, 2x 15GB Hard Drives, Ubuntu 7.10<br>
| | | image = |
| 3: Celeron 1.2GHz, 16MB Graphics Card, 256 MB Ram, 20GB Hard Drive, Win 98<br>
| | | title = [[Homebrew apps/WebRator]] |
| 4: AMD Athlon 1.8GHz, 128MB Graphics Card, 512MB Ram, 80GB Hard Drive, Win XP<br>
| | | desc = Interactive cyber fun for the whole family |
| 5: P1 233MHz, 8MB Graphics Card, 256MB Ram, 3GB Hard Drive, Win 95<br>
| | | type = Fakes/Jokes |
| 6: LAPTOP : Celeron 1.7GHz, 230MB Graphics Card, 1GB Ram, 2x 20GB Hard Drives, Win XP + Ubuntu 7.10<br>
| | | author = Cboomf |
| | | download = [http://cbwii.ulmb.com/WebRator.zip Download] |
| | | peripherals = {{Wiimote4}}{{WiFi}}{{Internet}} |
| | }} |
|
| |
|
| | {{Infobox homebrewapp |
| | | image = |
| | | title = [[User:Cboomf/libusbkbd|libusbkbd]] |
| | | desc = A library for usb keyboard usage |
| | | type = Library |
| | | author = Cboomf |
| | | download = yes |
| | | peripherals = {{USBKeyboard}} |
| | }} |
|
| |
|
| 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.
| | {{Infobox homebrewapp |
| | | image = |
| | | title = [[User:Cboomf/libwiilight|libwiilight]] |
| | | desc = A library for the disc slot light |
| | | type = Library |
| | | author = Cboomf |
| | | download = [[Image:libwiilight.zip]] |
| | | peripherals = |
| | }} |
|
| |
|
| 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>
| |
|
| |
|
| 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) {
| | I am a '''NERD''' ;-) |
| __STM_Init();
| |
| STM_RebootSystem();
| |
| __STM_Close();
| |
| }
| |
|
| |
|
| void fun(void) {
| | PC SPECS :- |
|
| |
|
| clearscreen();
| | 1: PIII 750MHz (over clocked to 800MHz), 64MB Dual Screen Graphics Card, 256MB Ram, 20GB Hard Drive, Win 98 + Ubuntu 7.10<br> |
| __STM_Init();
| | 2: Celeron 1.2GHz, 16MB Graohics Card, 512 MB Ram, 2x 15GB Hard Drives, Ubuntu 8.04<br> |
|
| | 3: Celeron 1.2GHz, 16MB Graphics Card, 256 MB Ram, 20GB Hard Drive, Win 98<br> |
| printf("FUN\n");
| | 4: AMD Athlon 1.8GHz, 128MB Graphics Card, 512MB Ram, 80GB Hard Drive, Win XP<br> |
| printf("---\n\n");
| | 5: P1 233MHz, 8MB Graphics Card, 256MB Ram, 3GB Hard Drive, Win 95<br> |
|
| | 6: LAPTOP : Celeron 1.7GHz, 230MB Graphics Card, 1GB Ram, 2x 20GB Hard Drives, Win XP + Ubuntu 8.04<br> |
| 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;
| |
| }
| |
| | |
| </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
| |
| Also you should not include .c files in the header.
| |
| <source lang="c"> | |
|
| |
|
| </source>
| | Keep in the randomness : [http://cboomf.blogspot.com Random Entry Points] |