Removed Wii DVD stuff functions, Removed Load from DVD in wiimode, Removed usb.c and usb.h (now in libOGC). Also updated all the makefiles to reflect this usb.c removal

This commit is contained in:
emukidid 2008-04-24 02:01:35 +00:00
parent a091581fb3
commit 379b4d2a1b
13 changed files with 1115 additions and 1578 deletions

View file

@ -28,16 +28,15 @@ CXXFLAGS =$(CFLAGS)
#GL_PATH =-I/usr/X11R6/include
OBJ =main/rom_gc.o \
OBJ =main/rom_gc.o \
main/main_gc-menu.o \
main/gc_dvd.o \
main/ROM-Cache.o \
fileBrowser/fileBrowser-SD.o \
fileBrowser/fileBrowser-DVD.o \
fileBrowser/fileBrowser-CARD.o \
fileBrowser/fileBrowser.o \
gui/usb.o \
gui/menu.o \
fileBrowser/fileBrowser.o \
gui/menu.o \
gui/menuFileBrowser.o \
gui/background_tex.o \
gui/gui_GX-menu.o \
@ -143,37 +142,37 @@ OBJ_AUDIO =gc_audio/main.o
# mupen64_GX_gfx/vi_GX.o \
# mupen64_GX_gfx/vi.o
OBJ_GLN64_GX =glN64_GX/glN64.o \
glN64_GX/Config_linux.o \
glN64_GX/OpenGL.o \
glN64_GX/N64.o \
glN64_GX/RSP.o \
glN64_GX/VI.o \
glN64_GX/Textures.o \
glN64_GX/FrameBuffer.o \
glN64_GX/Combiner.o \
glN64_GX/gDP.o \
glN64_GX/gSP.o \
glN64_GX/GBI.o \
glN64_GX/DepthBuffer.o \
glN64_GX/CRC.o \
glN64_GX/2xSAI.o \
glN64_GX/NV_register_combiners.o \
glN64_GX/texture_env.o \
glN64_GX/texture_env_combine.o \
glN64_GX/TEV_combiner.o \
glN64_GX/RDP.o \
glN64_GX/F3D.o \
glN64_GX/F3DEX.o \
glN64_GX/F3DEX2.o \
glN64_GX/L3D.o \
glN64_GX/L3DEX.o \
glN64_GX/L3DEX2.o \
glN64_GX/S2DEX.o \
glN64_GX/S2DEX2.o \
glN64_GX/F3DPD.o \
glN64_GX/F3DDKR.o \
glN64_GX/F3DWRUS.o
OBJ_GLN64_GX =glN64_GX/glN64.o \
glN64_GX/Config_linux.o \
glN64_GX/OpenGL.o \
glN64_GX/N64.o \
glN64_GX/RSP.o \
glN64_GX/VI.o \
glN64_GX/Textures.o \
glN64_GX/FrameBuffer.o \
glN64_GX/Combiner.o \
glN64_GX/gDP.o \
glN64_GX/gSP.o \
glN64_GX/GBI.o \
glN64_GX/DepthBuffer.o \
glN64_GX/CRC.o \
glN64_GX/2xSAI.o \
glN64_GX/NV_register_combiners.o \
glN64_GX/texture_env.o \
glN64_GX/texture_env_combine.o \
glN64_GX/TEV_combiner.o \
glN64_GX/RDP.o \
glN64_GX/F3D.o \
glN64_GX/F3DEX.o \
glN64_GX/F3DEX2.o \
glN64_GX/L3D.o \
glN64_GX/L3DEX.o \
glN64_GX/L3DEX2.o \
glN64_GX/S2DEX.o \
glN64_GX/S2DEX2.o \
glN64_GX/F3DPD.o \
glN64_GX/F3DDKR.o \
glN64_GX/F3DWRUS.o
HEADER =main/rom.h \
r4300/r4300.h \
@ -269,99 +268,99 @@ gc_audio/main.o: gc_audio/audio.c
#mupen64_soft_gfx/vi_GX.o: mupen64_soft_gfx/vi_GX.cpp
# $(CXX) $(CFLAGS) -c -o $@ $<
glN64_GX/glN64.o: glN64_GX/glN64.cpp
$(CXX) $(CFLAGS) -DMAINDEF -D__LINUX__ -D__GX__ -c -o $@ $<
# $(CXX) $(CFLAGS) -DMAINDEF -D__LINUX__ -DX86_ASM `sdl-config --cflags` -c -o $@ $<
glN64_GX/Config_linux.o: glN64_GX/Config_linux.cpp
$(CXX) $(CFLAGS) $(GTK_FLAGS) -D__LINUX__ -D__GX__ -c -o $@ $<
glN64_GX/OpenGL.o: glN64_GX/OpenGL.cpp
$(CXX) $(CFLAGS) -D__LINUX__ -D__GX__ -c -o $@ $<
glN64_GX/N64.o: glN64_GX/N64.cpp
$(CXX) $(CFLAGS) -D__LINUX__ -D__GX__ -c -o $@ $<
glN64_GX/RSP.o: glN64_GX/RSP.cpp
$(CXX) $(CFLAGS) -D__LINUX__ -D__GX__ -c -o $@ $<
glN64_GX/VI.o: glN64_GX/VI.cpp
$(CXX) $(CFLAGS) -D__LINUX__ -D__GX__ -c -o $@ $<
glN64_GX/Textures.o: glN64_GX/Textures.cpp
$(CXX) $(CFLAGS) -D__LINUX__ -D__GX__ -c -o $@ $<
glN64_GX/FrameBuffer.o: glN64_GX/FrameBuffer.cpp
$(CXX) $(CFLAGS) -D__LINUX__ -D__GX__ -c -o $@ $<
glN64_GX/Combiner.o: glN64_GX/Combiner.cpp
$(CXX) $(CFLAGS) -D__LINUX__ -D__GX__ -c -o $@ $<
glN64_GX/gDP.o: glN64_GX/gDP.cpp
$(CXX) $(CFLAGS) -D__LINUX__ -D__GX__ -c -o $@ $<
glN64_GX/gSP.o: glN64_GX/gSP.cpp
$(CXX) $(CFLAGS) -D__LINUX__ -D__GX__ -c -o $@ $<
glN64_GX/GBI.o: glN64_GX/GBI.cpp
$(CXX) $(CFLAGS) -D__LINUX__ -D__GX__ -c -o $@ $<
glN64_GX/DepthBuffer.o: glN64_GX/DepthBuffer.cpp
$(CXX) $(CFLAGS) -D__LINUX__ -D__GX__ -c -o $@ $<
glN64_GX/CRC.o: glN64_GX/CRC.cpp
$(CXX) $(CFLAGS) -D__LINUX__ -D__GX__ -c -o $@ $<
glN64_GX/2xSAI.o: glN64_GX/2xSAI.cpp
$(CXX) $(CFLAGS) -D__LINUX__ -D__GX__ -c -o $@ $<
glN64_GX/NV_register_combiners.o: glN64_GX/NV_register_combiners.cpp
$(CXX) $(CFLAGS) -D__LINUX__ -D__GX__ -c -o $@ $<
glN64_GX/texture_env.o: glN64_GX/texture_env.cpp
$(CXX) $(CFLAGS) -D__LINUX__ -D__GX__ -c -o $@ $<
glN64_GX/texture_env_combine.o: glN64_GX/texture_env_combine.cpp
$(CXX) $(CFLAGS) -D__LINUX__ -D__GX__ -c -o $@ $<
glN64_GX/TEV_combiner.o: glN64_GX/TEV_combiner.cpp
$(CXX) $(CFLAGS) -D__LINUX__ -D__GX__ -c -o $@ $<
glN64_GX/RDP.o: glN64_GX/RDP.cpp
$(CXX) $(CFLAGS) -D__LINUX__ -D__GX__ -c -o $@ $<
glN64_GX/F3D.o: glN64_GX/F3D.cpp
$(CXX) $(CFLAGS) -D__LINUX__ -D__GX__ -c -o $@ $<
glN64_GX/F3DEX.o: glN64_GX/F3DEX.cpp
$(CXX) $(CFLAGS) -D__LINUX__ -D__GX__ -c -o $@ $<
glN64_GX/F3DEX2.o: glN64_GX/F3DEX2.cpp
$(CXX) $(CFLAGS) -D__LINUX__ -D__GX__ -c -o $@ $<
glN64_GX/L3D.o: glN64_GX/L3D.cpp
$(CXX) $(CFLAGS) -D__LINUX__ -D__GX__ -c -o $@ $<
glN64_GX/L3DEX.o: glN64_GX/L3DEX.cpp
$(CXX) $(CFLAGS) -D__LINUX__ -D__GX__ -c -o $@ $<
glN64_GX/L3DEX2.o: glN64_GX/L3DEX2.cpp
$(CXX) $(CFLAGS) -D__LINUX__ -D__GX__ -c -o $@ $<
glN64_GX/S2DEX.o: glN64_GX/S2DEX.cpp
$(CXX) $(CFLAGS) -D__LINUX__ -D__GX__ -c -o $@ $<
glN64_GX/S2DEX2.o: glN64_GX/S2DEX2.cpp
$(CXX) $(CFLAGS) -D__LINUX__ -D__GX__ -c -o $@ $<
glN64_GX/F3DPD.o: glN64_GX/F3DPD.cpp
$(CXX) $(CFLAGS) -D__LINUX__ -D__GX__ -c -o $@ $<
glN64_GX/F3DDKR.o: glN64_GX/F3DDKR.cpp
$(CXX) $(CFLAGS) -D__LINUX__ -D__GX__ -c -o $@ $<
glN64_GX/F3DWRUS.o: glN64_GX/F3DWRUS.cpp
$(CXX) $(CFLAGS) -D__LINUX__ -D__GX__ -c -o $@ $<
glN64_GX/glN64.o: glN64_GX/glN64.cpp
$(CXX) $(CFLAGS) -DMAINDEF -D__LINUX__ -D__GX__ -c -o $@ $<
# $(CXX) $(CFLAGS) -DMAINDEF -D__LINUX__ -DX86_ASM `sdl-config --cflags` -c -o $@ $<
glN64_GX/Config_linux.o: glN64_GX/Config_linux.cpp
$(CXX) $(CFLAGS) $(GTK_FLAGS) -D__LINUX__ -D__GX__ -c -o $@ $<
glN64_GX/OpenGL.o: glN64_GX/OpenGL.cpp
$(CXX) $(CFLAGS) -D__LINUX__ -D__GX__ -c -o $@ $<
glN64_GX/N64.o: glN64_GX/N64.cpp
$(CXX) $(CFLAGS) -D__LINUX__ -D__GX__ -c -o $@ $<
glN64_GX/RSP.o: glN64_GX/RSP.cpp
$(CXX) $(CFLAGS) -D__LINUX__ -D__GX__ -c -o $@ $<
glN64_GX/VI.o: glN64_GX/VI.cpp
$(CXX) $(CFLAGS) -D__LINUX__ -D__GX__ -c -o $@ $<
glN64_GX/Textures.o: glN64_GX/Textures.cpp
$(CXX) $(CFLAGS) -D__LINUX__ -D__GX__ -c -o $@ $<
glN64_GX/FrameBuffer.o: glN64_GX/FrameBuffer.cpp
$(CXX) $(CFLAGS) -D__LINUX__ -D__GX__ -c -o $@ $<
glN64_GX/Combiner.o: glN64_GX/Combiner.cpp
$(CXX) $(CFLAGS) -D__LINUX__ -D__GX__ -c -o $@ $<
glN64_GX/gDP.o: glN64_GX/gDP.cpp
$(CXX) $(CFLAGS) -D__LINUX__ -D__GX__ -c -o $@ $<
glN64_GX/gSP.o: glN64_GX/gSP.cpp
$(CXX) $(CFLAGS) -D__LINUX__ -D__GX__ -c -o $@ $<
glN64_GX/GBI.o: glN64_GX/GBI.cpp
$(CXX) $(CFLAGS) -D__LINUX__ -D__GX__ -c -o $@ $<
glN64_GX/DepthBuffer.o: glN64_GX/DepthBuffer.cpp
$(CXX) $(CFLAGS) -D__LINUX__ -D__GX__ -c -o $@ $<
glN64_GX/CRC.o: glN64_GX/CRC.cpp
$(CXX) $(CFLAGS) -D__LINUX__ -D__GX__ -c -o $@ $<
glN64_GX/2xSAI.o: glN64_GX/2xSAI.cpp
$(CXX) $(CFLAGS) -D__LINUX__ -D__GX__ -c -o $@ $<
glN64_GX/NV_register_combiners.o: glN64_GX/NV_register_combiners.cpp
$(CXX) $(CFLAGS) -D__LINUX__ -D__GX__ -c -o $@ $<
glN64_GX/texture_env.o: glN64_GX/texture_env.cpp
$(CXX) $(CFLAGS) -D__LINUX__ -D__GX__ -c -o $@ $<
glN64_GX/texture_env_combine.o: glN64_GX/texture_env_combine.cpp
$(CXX) $(CFLAGS) -D__LINUX__ -D__GX__ -c -o $@ $<
glN64_GX/TEV_combiner.o: glN64_GX/TEV_combiner.cpp
$(CXX) $(CFLAGS) -D__LINUX__ -D__GX__ -c -o $@ $<
glN64_GX/RDP.o: glN64_GX/RDP.cpp
$(CXX) $(CFLAGS) -D__LINUX__ -D__GX__ -c -o $@ $<
glN64_GX/F3D.o: glN64_GX/F3D.cpp
$(CXX) $(CFLAGS) -D__LINUX__ -D__GX__ -c -o $@ $<
glN64_GX/F3DEX.o: glN64_GX/F3DEX.cpp
$(CXX) $(CFLAGS) -D__LINUX__ -D__GX__ -c -o $@ $<
glN64_GX/F3DEX2.o: glN64_GX/F3DEX2.cpp
$(CXX) $(CFLAGS) -D__LINUX__ -D__GX__ -c -o $@ $<
glN64_GX/L3D.o: glN64_GX/L3D.cpp
$(CXX) $(CFLAGS) -D__LINUX__ -D__GX__ -c -o $@ $<
glN64_GX/L3DEX.o: glN64_GX/L3DEX.cpp
$(CXX) $(CFLAGS) -D__LINUX__ -D__GX__ -c -o $@ $<
glN64_GX/L3DEX2.o: glN64_GX/L3DEX2.cpp
$(CXX) $(CFLAGS) -D__LINUX__ -D__GX__ -c -o $@ $<
glN64_GX/S2DEX.o: glN64_GX/S2DEX.cpp
$(CXX) $(CFLAGS) -D__LINUX__ -D__GX__ -c -o $@ $<
glN64_GX/S2DEX2.o: glN64_GX/S2DEX2.cpp
$(CXX) $(CFLAGS) -D__LINUX__ -D__GX__ -c -o $@ $<
glN64_GX/F3DPD.o: glN64_GX/F3DPD.cpp
$(CXX) $(CFLAGS) -D__LINUX__ -D__GX__ -c -o $@ $<
glN64_GX/F3DDKR.o: glN64_GX/F3DDKR.cpp
$(CXX) $(CFLAGS) -D__LINUX__ -D__GX__ -c -o $@ $<
glN64_GX/F3DWRUS.o: glN64_GX/F3DWRUS.cpp
$(CXX) $(CFLAGS) -D__LINUX__ -D__GX__ -c -o $@ $<
r4300/ppc/Wrappers.o: r4300/ppc/Wrappers.s
$(CC) $(CFLAGS) -c -o $@ $<

View file

@ -1,7 +1,7 @@
#Makefile MUPEN64 for Linux
CC =powerpc-gekko-gcc
CXX =powerpc-gekko-g++
CXX =powerpc-gekko-g++
AS =powerpc-gekko-as
#CFLAGS =-DX86 -O3 -mpentium -Wall -DEMU64_DEBUG
@ -15,7 +15,7 @@ CFLAGS = -g -O2 -Wall $(MACHDEP) $(INCLUDE) \
-DCPU_SHUTDOWN -DSPC700_SHUTDOWN -DVAR_CYCLES -DSOUND \
-DNOASM -DNGC -DNOASM -DPIXEL_FORMAT=RGB565 \
-fno-exceptions -Wno-unused-parameter -pipe \
-DUSE_GUI -DSHOW_DEBUG -DWII -DTHREADED_AUDIO \
-DUSE_GUI -DSHOW_DEBUG -DWII -DTHREADED_AUDIO \
# -DPROGRESSIVE_DISPLAY
# -DDEBUGON -DGLN64_SDLOG -DUSE_EXPANSION
@ -35,12 +35,11 @@ OBJ =main/rom_gc.o \
main/ROM-Cache-MEM2.o \
fileBrowser/fileBrowser-SD.o \
fileBrowser/fileBrowser-DVD.o \
fileBrowser/fileBrowser-CARD.o \
fileBrowser/fileBrowser-WiiFS.o \
fileBrowser/fileBrowser-CARD.o \
fileBrowser/fileBrowser-WiiFS.o \
fileBrowser/HW64/customTitle.o \
fileBrowser/HW64/workaround.o \
fileBrowser/fileBrowser.o \
gui/usb.o \
gui/menu.o \
gui/menuFileBrowser.o \
gui/background_tex.o \
@ -165,7 +164,7 @@ OBJ_GLN64_GX =glN64_GX/glN64.o \
glN64_GX/NV_register_combiners.o \
glN64_GX/texture_env.o \
glN64_GX/texture_env_combine.o \
glN64_GX/TEV_combiner.o \
glN64_GX/TEV_combiner.o \
glN64_GX/RDP.o \
glN64_GX/F3D.o \
glN64_GX/F3DEX.o \
@ -328,9 +327,9 @@ glN64_GX/texture_env.o: glN64_GX/texture_env.cpp
glN64_GX/texture_env_combine.o: glN64_GX/texture_env_combine.cpp
$(CXX) $(CFLAGS) -D__LINUX__ -D__GX__ -c -o $@ $<
glN64_GX/TEV_combiner.o: glN64_GX/TEV_combiner.cpp
$(CXX) $(CFLAGS) -D__LINUX__ -D__GX__ -c -o $@ $<
glN64_GX/TEV_combiner.o: glN64_GX/TEV_combiner.cpp
$(CXX) $(CFLAGS) -D__LINUX__ -D__GX__ -c -o $@ $<
glN64_GX/RDP.o: glN64_GX/RDP.cpp
$(CXX) $(CFLAGS) -D__LINUX__ -D__GX__ -c -o $@ $<

View file

@ -36,7 +36,6 @@ OBJ =main/rom_gc.o \
fileBrowser/fileBrowser-DVD.o \
fileBrowser/fileBrowser-CARD.o \
fileBrowser/fileBrowser.o \
gui/usb.o \
gui/menu.o \
gui/menuFileBrowser.o \
gui/background_tex.o \

View file

@ -29,7 +29,6 @@ OBJ =main/rom_gc.o \
fileBrowser/fileBrowser-DVD.o \
fileBrowser/fileBrowser-CARD.o \
fileBrowser/fileBrowser.o \
gui/usb.o \
gui/menu.o \
gui/menuFileBrowser.o \
gui/background_tex.o \

View file

@ -36,7 +36,6 @@ OBJ =main/rom_gc.o \
fileBrowser/fileBrowser-DVD.o \
fileBrowser/fileBrowser-CARD.o \
fileBrowser/fileBrowser.o \
gui/usb.o \
gui/menu.o \
gui/menuFileBrowser.o \
gui/background_tex.o \

View file

@ -8,14 +8,18 @@
#include <malloc.h>
#include <ogc/dvd.h>
/* DVD Globals */
extern unsigned int isWii;
extern int previously_initd;
int dvdInitialized;
extern struct
{
char name[128];
int flags;
int sector, size;
} file[MAXIMUM_ENTRIES_PER_DIR]; //150 files per dir, MAXIMUM.
int dvdInitialized;
/* Worked out manually from my original Disc */
#define OOT_OFFSET 0x54FBEEF4
#define MQ_OFFSET 0x52CCC5FC
@ -27,37 +31,36 @@ fileBrowser_file topLevel_DVD =
0, // offset
0, // size
FILE_BROWSER_ATTR_DIR
};
extern int previously_initd;
};
int DVD_check_state() {
#ifdef WII
dvdInitialized = 1;
return 0;
#endif
if(dvd_get_error() == 0){
dvdInitialized = 1;
return 0;
}
else {
while(dvd_get_error()) {
if(!isWii){
DVD_Mount ();
if(dvd_get_error())
DVD_Reset(DVD_RESETHARD);
}
if(isWii) {
DVD_Reset(DVD_RESETHARD);
dvd_read_id();
}
}
}
dvdInitialized = 1;
return 0;
if(dvd_get_error() == 0){
dvdInitialized = 1;
return 0;
}
else {
while(dvd_get_error()) {
if(!isWii){
DVD_Mount ();
if(dvd_get_error())
DVD_Reset(DVD_RESETHARD);
}
if(isWii) {
DVD_Reset(DVD_RESETHARD);
dvd_read_id();
}
}
}
dvdInitialized = 1;
return 0;
}
int fileBrowser_DVD_readDir(fileBrowser_file* ffile, fileBrowser_file** dir){
dvd_read_id();
DVD_check_state();
int num_entries = 0;
@ -117,9 +120,7 @@ int fileBrowser_DVD_readFile(fileBrowser_file* file, void* buffer, unsigned int
}
int fileBrowser_DVD_init(fileBrowser_file* file) {
#ifdef WII
return 0;
#endif
dvd_read_id();
if(dvd_get_error() == 0)
return 0;
@ -135,7 +136,6 @@ int fileBrowser_DVD_init(fileBrowser_file* file) {
}
int fileBrowser_DVD_deinit(fileBrowser_file* file) {
//dvd_motor_off(); //this should be made into its own menu option to swap DVD..
return 0;
}

View file

@ -7,7 +7,7 @@
#include <sdcard.h>
#include "DEBUG.h"
#include "TEXT.h"
#include "usb.h"
//#include "usb.h"
char text[DEBUG_TEXT_HEIGHT][DEBUG_TEXT_WIDTH];
char printToSD;
@ -54,12 +54,12 @@ void DEBUG_print(char* string,int pos){
if(pos == DBG_USBGECKO) {
#ifdef PRINTGECKO
if(!flushed){
usb_flush();
gecko_init(1);
flushed = 1;
}
int size = strlen(string);
usb_sendbuffer (&size,4);
usb_sendbuffer (string,size);
//usb_sendbuffer(1, &size,4);
gecko_sendbuffer(1, string,size);
#endif
}
else if(pos == DBG_SDGECKOOPEN) {
@ -92,5 +92,4 @@ void DEBUG_print(char* string,int pos){
}
#endif
}
}

1596
gui/menu.c

File diff suppressed because it is too large Load diff

218
gui/usb.c
View file

@ -1,218 +0,0 @@
/*---------------------------------------------------------------------------------------------
* USB Gecko Development Kit - http://www.usbgecko.com
* --------------------------------------------------------------------------------------------
*
*
* usb.c - V1.2 functions for the USB Gecko adapter (www.usbgecko.com).
* Now works for Wii Mode - use WIIMODE define in usb.h to set
* Copyright (c) 2008 - Nuke - <wiinuke@gmail.com>
*
*---------------------------------------------------------------------------------------------*/
#include <gccore.h> // If not using libogc need types
#include "usb.h"
/*---------------------------------------------------------------------------------------------*
Name: usb_sendbyte
Description: Send byte to Gamecube/Wii over EXI memory card port
*----------------------------------------------------------------------------------------------*/
static int __usb_sendbyte (char sendbyte)
{
s32 i;
exi_chan1sr = 0x000000D0;
exi_chan1data = 0xB0000000 | (sendbyte<<20);
exi_chan1cr = 0x19;
while((exi_chan1cr)&1);
i = exi_chan1data;
exi_chan1sr = 0;
if (i&0x04000000){
return 1;
}
return 0;
}
/*---------------------------------------------------------------------------------------------*
Name: usb_receivebyte
Description: Receive byte from Gamecube/Wii over EXI memory card port
*----------------------------------------------------------------------------------------------*/
static int __usb_receivebyte (char *receivebyte)
{
s32 i = 0;
exi_chan1sr = 0x000000D0;
exi_chan1data = 0xA0000000;
exi_chan1cr = 0x19;
while((exi_chan1cr)&1);
i = exi_chan1data;
exi_chan1sr = 0;
if (i&0x08000000){
*receivebyte=(i>>16)&0xff;
return 1;
}
return 0;
}
/*---------------------------------------------------------------------------------------------*
Name: usb_checksendstatus
Description: Chesk the FIFO is ready to send
*----------------------------------------------------------------------------------------------*/
static int __usb_checksendstatus()
{
s32 i = 0;
exi_chan1sr = 0x000000D0;
exi_chan1data = 0xC0000000;
exi_chan1cr = 0x19;
while((exi_chan1cr)&1);
i = exi_chan1data;
exi_chan1sr = 0x0;
if (i&0x04000000){
return 1;
}
return 0;
}
/*---------------------------------------------------------------------------------------------*
Name: usb_checkreceivestatus
Description: Check the FIFO is ready to receive
*----------------------------------------------------------------------------------------------*/
static int __usb_checkreceivestatus()
{
s32 i = 0;
exi_chan1sr = 0x000000D0;
exi_chan1data = 0xD0000000;
exi_chan1cr = 0x19;
while((exi_chan1cr)&1);
i = exi_chan1data;
exi_chan1sr = 0x0;
if (i&0x04000000){
return 1;
}
return 0;
}
/*---------------------------------------------------------------------------------------------*
Name: usb_sendbuffer
Description: Simple buffer send routine
*----------------------------------------------------------------------------------------------*/
void usb_sendbuffer (const void *buffer, int size)
{
char *sendbyte = (char*) buffer;
s32 bytesleft = size;
s32 returnvalue;
while (bytesleft > 0)
{
returnvalue = __usb_sendbyte(*sendbyte);
if(returnvalue) {
sendbyte++;
bytesleft--;
}
}
}
/*---------------------------------------------------------------------------------------------*
Name: usb_receivebuffer
Description: Simple buffer receive routine
*----------------------------------------------------------------------------------------------*/
void usb_receivebuffer (void *buffer, int size)
{
char *receivebyte = (char*)buffer;
s32 bytesleft = size;
s32 returnvalue;
while (bytesleft > 0)
{
returnvalue = __usb_receivebyte(receivebyte);
if(returnvalue) {
receivebyte++;
bytesleft--;
}
}
}
/*---------------------------------------------------------------------------------------------*
Name: usb_sendbuffersafe
Description: Simple buffer send routine with fifo check (use for large transfers)
*----------------------------------------------------------------------------------------------*/
void usb_sendbuffersafe (const void *buffer, int size)
{
char *sendbyte = (char*) buffer;
s32 bytesleft = size;
s32 returnvalue;
while (bytesleft > 0)
{
if(__usb_checksendstatus()){
returnvalue = __usb_sendbyte(*sendbyte);
if(returnvalue) {
sendbyte++;
bytesleft--;
}
}
}
}
/*---------------------------------------------------------------------------------------------*
Name: usb_receivebuffersafe
Description: Simple buffer receive routine with fifo check (use for large transfers)
*----------------------------------------------------------------------------------------------*/
void usb_receivebuffersafe (void *buffer, int size)
{
char *receivebyte = (char*)buffer;
s32 bytesleft = size;
s32 returnvalue;
while (bytesleft > 0)
{
if(__usb_checkreceivestatus()){
returnvalue = __usb_receivebyte(receivebyte);
if(returnvalue) {
receivebyte++;
bytesleft--;
}
}
}
}
/*---------------------------------------------------------------------------------------------*
Name: usb_checkgecko
Description: Chesk the Gecko is connected
*----------------------------------------------------------------------------------------------*/
int usb_checkgecko()
{
s32 i = 0;
exi_chan1sr = 0x000000D0;
exi_chan1data = 0x90000000;
exi_chan1cr = 0x19;
while((exi_chan1cr)&1);
i = exi_chan1data;
exi_chan1sr = 0x0;
if (i==0x04700000){
return 1;
}
return 0;
}
/*---------------------------------------------------------------------------------------------*
Name: usb_flush
Description: Flushes the FIFO, Use at the start of your program to avoid trash
*----------------------------------------------------------------------------------------------*/
void usb_flush()
{
char tempbyte;
while (__usb_receivebyte(&tempbyte));
}

View file

@ -1,60 +0,0 @@
/*---------------------------------------------------------------------------------------------
* USB Gecko Development Kit - http://www.usbgecko.com
* --------------------------------------------------------------------------------------------
*
*
* usb.h - functions for the USB Gecko adapter (www.usbgecko.com).
*
* Copyright (c) 2008 - Nuke - <wiinuke@gmail.com>
*
*---------------------------------------------------------------------------------------------*/
#ifndef __USB_H__
#define __USB_H__
//#define WIIMODE
// Wii Mode
#ifdef WIIMODE
#define exi_chan0sr *(volatile unsigned int*) 0xCD006800 // Channel 0 Status Register
#define exi_chan1sr *(volatile unsigned int*) 0xCD006814 // Channel 1 Status Register
#define exi_chan2sr *(volatile unsigned int*) 0xCD006828 // Channel 2 Status Register
#define exi_chan0cr *(volatile unsigned int*) 0xCD00680c // Channel 0 Control Register
#define exi_chan1cr *(volatile unsigned int*) 0xCD006820 // Channel 1 Control Register
#define exi_chan2cr *(volatile unsigned int*) 0xCD006834 // Channel 2 Control Register
#define exi_chan0data *(volatile unsigned int*) 0xCD006810 // Channel 0 Immediate Data
#define exi_chan1data *(volatile unsigned int*) 0xCD006824 // Channel 1 Immediate Data
#define exi_chan2data *(volatile unsigned int*) 0xCD006838 // Channel 2 Immediate Data
#define exi_chan0dmasta *(volatile unsigned int*) 0xCD006804 // Channel 0 DMA Start address
#define exi_chan1dmasta *(volatile unsigned int*) 0xCD006818 // Channel 1 DMA Start address
#define exi_chan2dmasta *(volatile unsigned int*) 0xCD00682c // Channel 2 DMA Start address
#define exi_chan0dmalen *(volatile unsigned int*) 0xCD006808 // Channel 0 DMA Length
#define exi_chan1dmalen *(volatile unsigned int*) 0xCD00681c // Channel 1 DMA Length
#define exi_chan2dmalen *(volatile unsigned int*) 0xCD006830 // Channel 2 DMA Length
#else
// GC Mode
#define exi_chan0sr *(volatile unsigned int*) 0xCC006800 // Channel 0 Status Register
#define exi_chan1sr *(volatile unsigned int*) 0xCC006814 // Channel 1 Status Register
#define exi_chan2sr *(volatile unsigned int*) 0xCC006828 // Channel 2 Status Register
#define exi_chan0cr *(volatile unsigned int*) 0xCC00680c // Channel 0 Control Register
#define exi_chan1cr *(volatile unsigned int*) 0xCC006820 // Channel 1 Control Register
#define exi_chan2cr *(volatile unsigned int*) 0xCC006834 // Channel 2 Control Register
#define exi_chan0data *(volatile unsigned int*) 0xCC006810 // Channel 0 Immediate Data
#define exi_chan1data *(volatile unsigned int*) 0xCC006824 // Channel 1 Immediate Data
#define exi_chan2data *(volatile unsigned int*) 0xCC006838 // Channel 2 Immediate Data
#define exi_chan0dmasta *(volatile unsigned int*) 0xCC006804 // Channel 0 DMA Start address
#define exi_chan1dmasta *(volatile unsigned int*) 0xCC006818 // Channel 1 DMA Start address
#define exi_chan2dmasta *(volatile unsigned int*) 0xCC00682c // Channel 2 DMA Start address
#define exi_chan0dmalen *(volatile unsigned int*) 0xCC006808 // Channel 0 DMA Length
#define exi_chan1dmalen *(volatile unsigned int*) 0xCC00681c // Channel 1 DMA Length
#define exi_chan2dmalen *(volatile unsigned int*) 0xCC006830 // Channel 2 DMA Length
#endif
// Function prototypes
void usb_flush();
int usb_checkgecko();
void usb_sendbuffer (const void *buffer, int size);
void usb_receivebuffer (void *buffer, int size);
void usb_sendbuffersafe (const void *buffer, int size);
void usb_receivebuffersafe (void *buffer, int size);
#endif // __USB_H__

View file

@ -1,6 +1,4 @@
#include <ogc/ipc.h>
typedef unsigned char u8;
typedef unsigned short u16;
void killWiimote(void){

View file

@ -13,176 +13,11 @@ struct
char name[128];
int flags;
int sector, size;
} file[MAXIMUM_ENTRIES_PER_DIR]; //150 files per dir, MAXIMUM.
} file[MAXIMUM_ENTRIES_PER_DIR] __attribute__((aligned(32))); //150 files per dir, MAXIMUM.
unsigned char sector_buffer[2048] __attribute__((aligned(32)));
// Wii stuff added.
#ifdef WII
#include <ogc/ipc.h>
#define IOCTL_DI_READID 0x70
#define IOCTL_DI_READ 0x71
#define IOCTL_DI_RESET 0x8A
#define IOCTL_DI_UNENCREAD 0x8D
#define IOCTL_DI_OFFSET 0xD9
#define IOCTL_DI_REQERROR 0xE0
#define IOCTL_DI_STOPMOTOR 0xE3
#define IOCTL_DI_OPENPART 0x8B
#define IOCTL_DI_CLOSEPART 0x8C
static int __dvd_fd = -1;
int previously_initd = 0;
static char __di_fs[] ATTRIBUTE_ALIGN(32) = "/dev/di";
u8 dicommand [32] ATTRIBUTE_ALIGN(32);
u8 dibufferio[32] ATTRIBUTE_ALIGN(32);
// Run this as many times as you want, it won't have any effect apart from the 1st time.
int WiiDVD_Init() {
if(!previously_initd) {
int ret;
ret = IOS_Open(__di_fs,0);
if(ret<0) return ret;
__dvd_fd = ret;
previously_initd = 1;
}
return 0;
}
/* Reset the drive plus spin it up, and retry infinitely too */
void WiiDVD_Reset() {
memset(dicommand, 0, 32 );
dicommand[0] = IOCTL_DI_RESET;
((u32*)dicommand)[1] = 1; //spinup(?)
IOS_Ioctl(__dvd_fd,dicommand[0],&dicommand,0x20,NULL,0);
}
/* Refer to YAGCD DVD Error codes, these are the same */
u32 WiiDVD_GetError() {
int ret;
memset(dicommand, 0, 32 );
dicommand[0] = IOCTL_DI_REQERROR;
ret = IOS_Ioctl(__dvd_fd,dicommand[0],&dicommand,0x20,&dibufferio,0x20);
memcpy(ret,dibufferio[0],4);
return ret;
}
/* Stop the drive completely (reset and read id required after this) */
void WiiDVD_StopMotor() {
memset(dicommand, 0, 32 );
dicommand[0] = IOCTL_DI_STOPMOTOR;
((u32*)dicommand)[1] = 0;
((u32*)dicommand)[2] = 0;
IOS_Ioctl(__dvd_fd,dicommand[0],&dicommand,0x20,&dibufferio,0x20);
}
/* Read the Disc ID (This basically makes our medium readable) */
int WiiDVD_ReadID(void *dst) {
int ret;
memset(dicommand, 0, 32 );
dicommand[0] = IOCTL_DI_READID;
((u32*)dicommand)[1] = 0;
((u32*)dicommand)[2] = 0;
ret = IOS_Ioctl(__dvd_fd,dicommand[0],&dicommand,0x20,(void*)0x80000000,0x20);
return ret;
}
/* Only used to open partitions. Pass in physical offset not sector LBA */
int WiiDVDReadUnEncrypted(void* dst, unsigned int len, unsigned int offset){
int ret;
memset(dicommand, 0, 32 );
dicommand[0] = IOCTL_DI_UNENCREAD;
((u32*)dicommand)[1] = len;
((u32*)dicommand)[2] = (u32)(offset>>2);
ret = IOS_Ioctl(__dvd_fd,dicommand[0],&dicommand,0x20,(u8*)dst,len);
return 0;
}
/* Notes:
Only usable when a partition has been opened.
Pass offset in as physical offset not sector LBA.
(Remember the above as the wii gives you sector LBA ALOT (so just <<2 it and pass it in))
If you have opened a partition, the offsets you pass in are partition relative.
I.e. offset 0 is not offset 0 on the disc but only on the partition
*/
int WiiDVDRead(void* dst, unsigned int len, unsigned int offset){
int ret;
memset(dicommand, 0, 32 );
dicommand[0] = IOCTL_DI_READ;
((u32*)dicommand)[1] = len;
((u32*)dicommand)[2] = (u32)(offset>>2);
ret = IOS_Ioctl(__dvd_fd,dicommand[0],&dicommand,0x20,(u8*)dst,len);
return 0;
}
/* Not really needed */
int WiiDVDSeek(unsigned int offset){
int ret;
memset(dicommand, 0, 32 );
dicommand[0] = 0xAB;
((u32*)dicommand)[1] = (u32)(offset>>2);
ret = IOS_Ioctl(__dvd_fd,dicommand[0],&dicommand,0x20,&dibufferio,0x20);
return 0;
}
int WiiDVDSetOffset(unsigned int offset){
int ret;
memset(dicommand, 0, 32 );
dicommand[0] = 0xD9;
((u32*)dicommand)[1] = (u32)(offset>>2);
ret = IOS_Ioctl(__dvd_fd,dicommand[0],&dicommand,0x20,&dibufferio,0x20);
return 0;
}
/* Only needs valid offset+valid certificate_out 32 byte aligned buffer
also this does all the /dev/es stuff for us!
*/
static ioctlv __di_iovector[0x08] ATTRIBUTE_ALIGN(32);
static u32 __di_lastticketerror[0x08] ATTRIBUTE_ALIGN(32);
int WiiDVD_LowOpenPartition(u32 offset,void *eticket,u32 certin_len,void *certificate_in,void *certificate_out)
{
int ret;
if(eticket!=NULL && ((u32)eticket%32)!=0) return -1;
if(certificate_in!=NULL && ((u32)certificate_in%32)!=0) return -1;
if(certificate_out!=NULL && ((u32)certificate_out%32)!=0) return -1;
memset(dicommand, 0, 32 );
dicommand[0x00] = IOCTL_DI_OPENPART;
((u32*)dicommand)[1] = offset;
__di_iovector[0].data = &dicommand;
__di_iovector[0].len = 0x20;
__di_iovector[1].data = eticket;
if(eticket==NULL) __di_iovector[1].len = 0;
else __di_iovector[1].len = 676;
__di_iovector[2].data = certificate_in;
if(certificate_in==NULL) __di_iovector[2].len = 0;
else __di_iovector[2].len = certin_len;
__di_iovector[3].data = certificate_out;
__di_iovector[3].len = 18916;
__di_iovector[4].data = __di_lastticketerror;
__di_iovector[4].len = 0x20;
ret = IOS_Ioctlv(__dvd_fd,dicommand[0],3,2,__di_iovector);
printf("LowOpenParition returns %i\n",ret);
return ret;
}
int WiiDVD_LowClosePartition()
{
int ret;
memset(dicommand, 0, 32 );
dicommand[0x00] = IOCTL_DI_CLOSEPART;
ret = IOS_Ioctl(__dvd_fd,dicommand[0],&dicommand,0x20,NULL,0);
return ret;
}
#endif
int dvd_read_id()
{
#ifdef WII
return WiiDVD_ReadID((void*)0x80000000);
#else
dvd[0] = 0x2E;
dvd[1] = 0;
dvd[2] = 0xA8000040;
@ -195,28 +30,20 @@ int dvd_read_id()
if (dvd[0] & 0x4)
return 1;
return 0;
#endif
}
unsigned int dvd_get_error(void)
{
#ifdef WII
return WiiDVD_GetError();
#else
dvd[2] = 0xE0000000;
dvd[8] = 0;
dvd[7] = 1; // IMM
while (dvd[7] & 1);
return dvd[8];
#endif
}
void dvd_motor_off()
{
#ifdef WII
WiiDVD_StopMotor();
#else
dvd[0] = 0x2E;
dvd[1] = 0;
dvd[2] = 0xe3000000;
@ -226,14 +53,10 @@ void dvd_motor_off()
dvd[6] = 0;
dvd[7] = 1; // IMM
while (dvd[7] & 1);
#endif
}
int dvd_read(void* dst, unsigned int len, unsigned int offset)
{
#ifdef WII
return WiiDVDReadUnEncrypted(dst,len,offset);
#endif
if ((((int)dst) & 0xC0000000) == 0x80000000) // cached?
dvd[0] = 0x2E;
dvd[1] = 0;
@ -282,169 +105,180 @@ int read_safe(void* dst, int offset, int len)
int read_direntry(unsigned char* direntry)
{
int nrb = *direntry++;
++direntry;
int nrb = *direntry++;
++direntry;
int sector;
int sector;
direntry += 4;
sector = (*direntry++) << 24;
sector |= (*direntry++) << 16;
sector |= (*direntry++) << 8;
sector |= (*direntry++);
direntry += 4;
sector = (*direntry++) << 24;
sector |= (*direntry++) << 16;
sector |= (*direntry++) << 8;
sector |= (*direntry++);
int size;
int size;
direntry += 4;
direntry += 4;
size = (*direntry++) << 24;
size |= (*direntry++) << 16;
size |= (*direntry++) << 8;
size |= (*direntry++);
size = (*direntry++) << 24;
size |= (*direntry++) << 16;
size |= (*direntry++) << 8;
size |= (*direntry++);
direntry += 7; // skip date
direntry += 7; // skip date
int flags = *direntry++;
++direntry; ++direntry; direntry += 4;
int flags = *direntry++;
++direntry; ++direntry; direntry += 4;
int nl = *direntry++;
int nl = *direntry++;
char* name = file[files].name;
char* name = file[files].name;
file[files].sector = sector;
file[files].size = size;
file[files].flags = flags;
file[files].sector = sector;
file[files].size = size;
file[files].flags = flags;
if ((nl == 1) && (direntry[0] == 1)) // ".."
{
file[files].name[0] = 0;
if (last_current_dir != sector)
files++;
}
else if ((nl == 1) && (direntry[0] == 0))
{
last_current_dir = sector;
}
else
{
if (is_unicode)
{
int i;
for (i = 0; i < (nl / 2); ++i)
name[i] = direntry[i * 2 + 1];
name[i] = 0;
nl = i;
}
else
{
memcpy(name, direntry, nl);
name[nl] = 0;
}
if ((nl == 1) && (direntry[0] == 1)) // ".."
{
file[files].name[0] = 0;
if (last_current_dir != sector)
files++;
}
else if ((nl == 1) && (direntry[0] == 0))
{
last_current_dir = sector;
}
else
{
if (is_unicode)
{
int i;
for (i = 0; i < (nl / 2); ++i)
name[i] = direntry[i * 2 + 1];
name[i] = 0;
nl = i;
}
else
{
memcpy(name, direntry, nl);
name[nl] = 0;
}
if (!(flags & 2))
{
if (name[nl - 2] == ';')
name[nl - 2] = 0;
if (!(flags & 2))
{
if (name[nl - 2] == ';')
name[nl - 2] = 0;
int i = nl;
while (i >= 0)
if (name[i] == '.')
break;
else
--i;
int i = nl;
while (i >= 0)
if (name[i] == '.')
break;
else
--i;
++i;
++i;
}
else
{
name[nl++] = '/';
name[nl] = 0;
}
}
else
{
name[nl++] = '/';
name[nl] = 0;
}
files++;
}
files++;
}
return nrb;
return nrb;
}
void read_directory(int sector, int len)
{
read_sector(sector_buffer, sector);
int ptr = 0;
files = 0;
memset(file,0,sizeof(file));
while (len > 0)
{
ptr += read_direntry(sector_buffer + ptr);
if (!sector_buffer[ptr]) {
len -= 2048;
read_sector(sector_buffer, ++sector);
ptr = 0;
}
}
}
read_sector(sector_buffer, sector);
int ptr = 0;
files = 0;
memset(file,0,sizeof(file));
while (len > 0)
{
ptr += read_direntry(sector_buffer + ptr);
if (!sector_buffer[ptr])
{
len -= 2048;
read_sector(sector_buffer, ++sector);
ptr = 0;
}
}
}
int dvd_read_directoryentries(unsigned int offset, int size) {
int sector = 16;
static unsigned char buffer[2048] __attribute__((aligned(32)));
struct pvd_s* pvd = 0;
struct pvd_s* svd = 0;
while (sector < 32)
{
if (read_sector(buffer, sector))
return FATAL_ERROR;
if (!memcmp(((struct pvd_s *)buffer)->id, "\2CD001\1", 8))
{
svd = (void*)buffer;
break;
}
++sector;
}
int sector = 16;
static unsigned char bufferDVD[2048] __attribute__((aligned(32)));
struct pvd_s* pvd = 0;
struct pvd_s* svd = 0;
while (sector < 32)
{
if (read_sector(bufferDVD, sector))
return FATAL_ERROR;
if (!memcmp(((struct pvd_s *)bufferDVD)->id, "\2CD001\1", 8))
{
svd = (void*)bufferDVD;
break;
}
++sector;
}
if (!svd)
{
sector = 16;
while (sector < 32)
{
if (read_sector(buffer, sector))
return FATAL_ERROR;
if (!memcmp(((struct pvd_s *)buffer)->id, "\1CD001\1", 8))
{
pvd = (void*)buffer;
break;
}
++sector;
}
}
if (!svd)
{
sector = 16;
while (sector < 32)
{
if (read_sector(bufferDVD, sector))
return FATAL_ERROR;
if ((!pvd) && (!svd)) {
return NO_ISO9660_DISC;
}
if (!memcmp(((struct pvd_s *)bufferDVD)->id, "\1CD001\1", 8))
{
pvd = (void*)bufferDVD;
break;
}
++sector;
}
}
files = 0;
if (svd) {
is_unicode = 1;
read_direntry(svd->root_direntry);
}
else {
is_unicode = 0;
read_direntry(pvd->root_direntry);
}
if((size + offset) == 0) { // enter root
read_directory(file[0].sector, file[0].size);
}
else
read_directory((offset/2048), size);
if ((!pvd) && (!svd))
{
return NO_ISO9660_DISC;
}
if(files>0)
return files;
return NO_FILES;
files = 0;
if (svd)
{
is_unicode = 1;
read_direntry(svd->root_direntry);
}
else
{
is_unicode = 0;
read_direntry(pvd->root_direntry);
}
if((size + offset) == 0) {
// enter root
read_directory(file[0].sector, file[0].size);
}
else
read_directory((offset/2048), size);
if(files>0)
return files;
return NO_FILES;
}

View file

@ -24,21 +24,6 @@ int is_unicode;
int files;
int dvd_read_id();
#ifdef WII
int WiiDVD_Init();
void WiiDVD_Reset();
unsigned int WiiDVD_GetError();
void WiiDVD_StopMotor();
int WiiDVD_ReadID(void *dst);
int WiiDVDReadUnEncrypted(void* dst, unsigned int len, unsigned int offset);
int WiiDVDRead(void* dst, unsigned int len, unsigned int offset);
int WiiDVDSeek(unsigned int offset);
int WiiDVDSetOffset(unsigned int offset);
int WiiDVD_LowClosePartition();
int WiiDVD_LowOpenPartition(unsigned int offset,void *eticket,unsigned int certin_len,void *certificate_in,void *certificate_out);
#endif
struct pvd_s
{
char id[8];