mirror of
https://github.com/wiiu-env/Flappy-Bird_GX2.git
synced 2024-11-05 07:45:08 +01:00
RPX Channel
RPX Channel
This commit is contained in:
parent
e6918ea927
commit
1463c318e0
66
Makefile
66
Makefile
@ -9,6 +9,9 @@ endif
|
|||||||
ifeq ($(strip $(DEVKITPRO)),)
|
ifeq ($(strip $(DEVKITPRO)),)
|
||||||
$(error "Please set DEVKITPRO in your environment. export DEVKITPRO=<path to>devkitPRO")
|
$(error "Please set DEVKITPRO in your environment. export DEVKITPRO=<path to>devkitPRO")
|
||||||
endif
|
endif
|
||||||
|
ifeq ($(strip $(WUT_ROOT)),)
|
||||||
|
$(error "Please ensure WUT_ROOT is in your environment.")
|
||||||
|
endif
|
||||||
export PATH := $(DEVKITPPC)/bin:$(PORTLIBS)/bin:$(PATH)
|
export PATH := $(DEVKITPPC)/bin:$(PORTLIBS)/bin:$(PATH)
|
||||||
export LIBOGC_INC := $(DEVKITPRO)/libogc/include
|
export LIBOGC_INC := $(DEVKITPRO)/libogc/include
|
||||||
export LIBOGC_LIB := $(DEVKITPRO)/libogc/lib/wii
|
export LIBOGC_LIB := $(DEVKITPRO)/libogc/lib/wii
|
||||||
@ -22,6 +25,8 @@ export CXX := $(PREFIX)g++
|
|||||||
export AR := $(PREFIX)ar
|
export AR := $(PREFIX)ar
|
||||||
export OBJCOPY := $(PREFIX)objcopy
|
export OBJCOPY := $(PREFIX)objcopy
|
||||||
|
|
||||||
|
export ELF2RPL := $(WUT_ROOT)/bin/elf2rpl
|
||||||
|
|
||||||
#---------------------------------------------------------------------------------
|
#---------------------------------------------------------------------------------
|
||||||
# TARGET is the name of the output
|
# TARGET is the name of the output
|
||||||
# BUILD is the directory where object files & intermediate files will be placed
|
# BUILD is the directory where object files & intermediate files will be placed
|
||||||
@ -32,13 +37,17 @@ TARGET := flappy_bird
|
|||||||
BUILD := build
|
BUILD := build
|
||||||
BUILD_DBG := $(TARGET)_dbg
|
BUILD_DBG := $(TARGET)_dbg
|
||||||
SOURCES := src \
|
SOURCES := src \
|
||||||
src/common \
|
|
||||||
src/dynamic_libs \
|
src/dynamic_libs \
|
||||||
src/fs \
|
src/fs \
|
||||||
src/game \
|
src/game \
|
||||||
src/gui \
|
src/gui \
|
||||||
|
src/kernel \
|
||||||
|
src/loader \
|
||||||
src/menu \
|
src/menu \
|
||||||
|
src/network \
|
||||||
|
src/patcher \
|
||||||
src/resources \
|
src/resources \
|
||||||
|
src/settings \
|
||||||
src/sounds \
|
src/sounds \
|
||||||
src/system \
|
src/system \
|
||||||
src/utils \
|
src/utils \
|
||||||
@ -59,7 +68,10 @@ CFLAGS := -std=gnu11 -mrvl -mcpu=750 -meabi -mhard-float -ffast-math \
|
|||||||
CXXFLAGS := -std=gnu++11 -mrvl -mcpu=750 -meabi -mhard-float -ffast-math \
|
CXXFLAGS := -std=gnu++11 -mrvl -mcpu=750 -meabi -mhard-float -ffast-math \
|
||||||
-O3 -Wall -Wextra -Wno-unused-parameter -Wno-strict-aliasing $(INCLUDE)
|
-O3 -Wall -Wextra -Wno-unused-parameter -Wno-strict-aliasing $(INCLUDE)
|
||||||
ASFLAGS := -mregnames
|
ASFLAGS := -mregnames
|
||||||
LDFLAGS := -nostartfiles -Wl,-Map,$(notdir $@).map,-wrap,malloc,-wrap,free,-wrap,memalign,-wrap,calloc,-wrap,realloc,-wrap,malloc_usable_size,-wrap,_malloc_r,-wrap,_free_r,-wrap,_realloc_r,-wrap,_calloc_r,-wrap,_memalign_r,-wrap,_malloc_usable_size_r,-wrap,valloc,-wrap,_valloc_r,-wrap,_pvalloc_r,--gc-sections
|
LDFLAGS := -nostartfiles -T $(WUT_ROOT)/rules/rpl.ld -pie -fPIE -z common-page-size=64 -z max-page-size=64 -lcrt \
|
||||||
|
-Wl,-wrap,malloc,-wrap,free,-wrap,memalign,-wrap,calloc,-wrap,realloc,-wrap,malloc_usable_size \
|
||||||
|
-Wl,-wrap,_malloc_r,-wrap,_free_r,-wrap,_realloc_r,-wrap,_calloc_r,-wrap,_memalign_r,-wrap,_malloc_usable_size_r \
|
||||||
|
-Wl,-wrap,valloc,-wrap,_valloc_r,-wrap,_pvalloc_r,-wrap,__eabi -Wl,--gc-sections
|
||||||
|
|
||||||
#---------------------------------------------------------------------------------
|
#---------------------------------------------------------------------------------
|
||||||
Q := @
|
Q := @
|
||||||
@ -67,16 +79,16 @@ MAKEFLAGS += --no-print-directory
|
|||||||
#---------------------------------------------------------------------------------
|
#---------------------------------------------------------------------------------
|
||||||
# any extra libraries we wish to link with the project
|
# any extra libraries we wish to link with the project
|
||||||
#---------------------------------------------------------------------------------
|
#---------------------------------------------------------------------------------
|
||||||
LIBS := -lgcc -lgd -lpng -ljpeg -lz -lfreetype -lmad -lvorbisidec
|
LIBS := -lcrt -lcoreinit -lproc_ui -lnsysnet -lsndcore2 -lvpad -lgx2 -lsysapp -lgd -lpng -lz -lfreetype -lmad -lvorbisidec
|
||||||
|
|
||||||
#---------------------------------------------------------------------------------
|
#---------------------------------------------------------------------------------
|
||||||
# list of directories containing libraries, this must be the top level containing
|
# list of directories containing libraries, this must be the top level containing
|
||||||
# include and lib
|
# include and lib
|
||||||
#---------------------------------------------------------------------------------
|
#---------------------------------------------------------------------------------
|
||||||
LIBDIRS := $(CURDIR) \
|
LIBDIRS := $(CURDIR) \
|
||||||
$(DEVKITPPC)/lib \
|
$(DEVKITPPC)/ \
|
||||||
$(DEVKITPPC)/lib/gcc/powerpc-eabi/4.8.2
|
$(DEVKITPPC)/lib/gcc/powerpc-eabi/4.8.2 \
|
||||||
|
$(WUT_ROOT)/lib
|
||||||
|
|
||||||
#---------------------------------------------------------------------------------
|
#---------------------------------------------------------------------------------
|
||||||
# no real need to edit anything past this point unless you need to add additional
|
# no real need to edit anything past this point unless you need to add additional
|
||||||
@ -119,14 +131,13 @@ export OFILES := $(CPPFILES:.cpp=.o) $(CFILES:.c=.o) \
|
|||||||
# build a list of include paths
|
# build a list of include paths
|
||||||
#---------------------------------------------------------------------------------
|
#---------------------------------------------------------------------------------
|
||||||
export INCLUDE := $(foreach dir,$(INCLUDES),-I$(CURDIR)/$(dir)) \
|
export INCLUDE := $(foreach dir,$(INCLUDES),-I$(CURDIR)/$(dir)) \
|
||||||
$(foreach dir,$(LIBDIRS),-I$(dir)/include) \
|
-I$(CURDIR)/$(BUILD) -I$(WUT_ROOT)/include \
|
||||||
-I$(CURDIR)/$(BUILD) -I$(LIBOGC_INC) \
|
|
||||||
-I$(PORTLIBS)/include -I$(PORTLIBS)/include/freetype2
|
-I$(PORTLIBS)/include -I$(PORTLIBS)/include/freetype2
|
||||||
|
|
||||||
#---------------------------------------------------------------------------------
|
#---------------------------------------------------------------------------------
|
||||||
# build a list of library paths
|
# build a list of library paths
|
||||||
#---------------------------------------------------------------------------------
|
#---------------------------------------------------------------------------------
|
||||||
export LIBPATHS := $(foreach dir,$(LIBDIRS),-L$(dir)/lib) \
|
export LIBPATHS := $(foreach dir,$(LIBDIRS),-L$(dir)) \
|
||||||
-L$(LIBOGC_LIB) -L$(PORTLIBS)/lib
|
-L$(LIBOGC_LIB) -L$(PORTLIBS)/lib
|
||||||
|
|
||||||
export OUTPUT := $(CURDIR)/$(TARGET)
|
export OUTPUT := $(CURDIR)/$(TARGET)
|
||||||
@ -135,12 +146,29 @@ export OUTPUT := $(CURDIR)/$(TARGET)
|
|||||||
#---------------------------------------------------------------------------------
|
#---------------------------------------------------------------------------------
|
||||||
$(BUILD):
|
$(BUILD):
|
||||||
@[ -d $@ ] || mkdir -p $@
|
@[ -d $@ ] || mkdir -p $@
|
||||||
|
# @$(Q)$(MAKE) -C sd_loader
|
||||||
@$(MAKE) --no-print-directory -C $(BUILD) -f $(CURDIR)/Makefile
|
@$(MAKE) --no-print-directory -C $(BUILD) -f $(CURDIR)/Makefile
|
||||||
|
|
||||||
#---------------------------------------------------------------------------------
|
#---------------------------------------------------------------------------------
|
||||||
clean:
|
clean: clean_channel
|
||||||
@echo clean ...
|
@echo clean ...
|
||||||
@rm -fr $(BUILD) $(OUTPUT).elf $(OUTPUT).bin $(BUILD_DBG).elf
|
@rm -fr $(BUILD) $(OUTPUT).elf $(OUTPUT).bin $(BUILD_DBG).elf $(OUTPUT).rpx
|
||||||
|
# @$(MAKE) -C sd_loader clean
|
||||||
|
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
|
install_channel: $(BUILD) NUSPacker.jar encryptKeyWith
|
||||||
|
@cp $(OUTPUT).rpx channel/code/
|
||||||
|
java -jar NUSPacker.jar -in "channel" -out "install_channel"
|
||||||
|
|
||||||
|
NUSPacker.jar:
|
||||||
|
wget https://bitbucket.org/timogus/nuspacker/downloads/NUSPacker.jar
|
||||||
|
|
||||||
|
encryptKeyWith:
|
||||||
|
@echo "Missing common key file \"encryptKeyWith\"! Insert the common key as string into \"encryptKeyWith\" file in the HBL Makefile path!"
|
||||||
|
@exit 1
|
||||||
|
|
||||||
|
clean_channel:
|
||||||
|
@rm -fr install_channel NUSPacker.jar fst.bin output tmp
|
||||||
|
|
||||||
#---------------------------------------------------------------------------------
|
#---------------------------------------------------------------------------------
|
||||||
else
|
else
|
||||||
@ -150,19 +178,23 @@ DEPENDS := $(OFILES:.o=.d)
|
|||||||
#---------------------------------------------------------------------------------
|
#---------------------------------------------------------------------------------
|
||||||
# main targets
|
# main targets
|
||||||
#---------------------------------------------------------------------------------
|
#---------------------------------------------------------------------------------
|
||||||
|
$(OUTPUT).rpx: $(OUTPUT).elf
|
||||||
$(OUTPUT).elf: $(OFILES)
|
$(OUTPUT).elf: $(OFILES)
|
||||||
|
|
||||||
#---------------------------------------------------------------------------------
|
#---------------------------------------------------------------------------------
|
||||||
# This rule links in binary data with the .jpg extension
|
# This rule links in binary data with the .jpg extension
|
||||||
#---------------------------------------------------------------------------------
|
#---------------------------------------------------------------------------------
|
||||||
%.elf: link.ld $(OFILES)
|
%.elf: $(OFILES)
|
||||||
@echo "linking ... $(TARGET).elf"
|
@echo "linking ... $(TARGET).elf"
|
||||||
$(Q)$(LD) -n -T $^ $(LDFLAGS) -o ../$(BUILD_DBG).elf $(LIBPATHS) $(LIBS)
|
$(Q)$(LD) $^ $(LDFLAGS) -o $@ $(LIBPATHS) $(LIBS)
|
||||||
$(Q)$(OBJCOPY) -S -R .comment -R .gnu.attributes ../$(BUILD_DBG).elf $@
|
# $(Q)$(OBJCOPY) -S -R .comment -R .gnu.attributes ../$(BUILD_DBG).elf $@
|
||||||
|
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
|
%.rpx: %.elf
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
|
@echo "[RPX] $(notdir $@)"
|
||||||
|
@$(ELF2RPL) $^ $@
|
||||||
|
|
||||||
../data/loader.bin:
|
|
||||||
$(MAKE) -C ../loader clean
|
|
||||||
$(MAKE) -C ../loader
|
|
||||||
#---------------------------------------------------------------------------------
|
#---------------------------------------------------------------------------------
|
||||||
%.a:
|
%.a:
|
||||||
#---------------------------------------------------------------------------------
|
#---------------------------------------------------------------------------------
|
||||||
|
30
README.md
30
README.md
@ -1,19 +1,23 @@
|
|||||||
#Flappy Bird GX2#
|
#Flappy Bird RPX#
|
||||||
A GX2 Flappy Bird port for the WiiU.
|
A RPX Flappy Bird port for WiiU
|
||||||
Assets from Floppy Bird (HTML5 and the original Android game).
|
Assest from floppy bird HTML5 and original android game
|
||||||
|
|
||||||
|
#Installation#
|
||||||
|
Put the Flappy Bird folder on an SD card in the "install" folder. Use wup installer y mod to install to your NAND or USB. It is recommended to install to USB. Signature patching is required.
|
||||||
|
|
||||||
#Usage#
|
#Usage#
|
||||||
Press A to begin the Game
|
Press A to begin the Game
|
||||||
Press A to jump
|
Press A to jump
|
||||||
Press HOME to exit
|
Press HOME to exit
|
||||||
Avoid the pipes and the flor!
|
Avoid the pipes and the floor!
|
||||||
|
|
||||||
#Building#
|
#Building#
|
||||||
In order to build this application, you need the custom liboGC and portlibs modified/created by dimok. You can find them on the loadiine_gx2 repo (https://github.com/dimok789/loadiine_gx2/releases/tag/v0.2). Simply put the files in your devkit folder and run the Makefile.
|
In order to build this application, you need the custom liboGC and portlibs modified/created by dimok. You can find them on the loadiine_gx2 repo (https://github.com/dimok789/loadiine_gx2/releases/tag/v0.2). Simply put the files in your devkit folder and run the Makefile.
|
||||||
|
|
||||||
#Credits:#
|
#Credits:#
|
||||||
**dimok** - WiiU librabries, dynamic_libs, examples, Homebrew Launcher
|
<b>dimok</b> - WiiU librabries, dynamic_libs, examples, Homebrew Launcher
|
||||||
**Maschell** - GX2_Example and coding help
|
<b>Maschell</b> - GX2_Example and coding help
|
||||||
**vgmoose** - Coding help
|
<b>vgmoose</b> - Coding help
|
||||||
**pwsincd** - Icon
|
<b>pwsincd</b> - Icon
|
||||||
**QuarkTheAwesome, dylon99** - Various help and testing
|
<b>QuarkTheAwesome, dylon99</b> - Various help and testing
|
||||||
|
<b>brienj</b> - RPX build
|
||||||
|
11
channel/code/app.xml
Normal file
11
channel/code/app.xml
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<app type="complex" access="777">
|
||||||
|
<version type="unsignedInt" length="4">1</version>
|
||||||
|
<os_version type="hexBinary" length="8">000500101000400A</os_version>
|
||||||
|
<title_id type="hexBinary" length="8">0005000046425244</title_id>
|
||||||
|
<title_version type="hexBinary" length="2">0000</title_version>
|
||||||
|
<sdk_version type="unsignedInt" length="4">20811</sdk_version>
|
||||||
|
<app_type type="hexBinary" length="4">80000000</app_type>
|
||||||
|
<group_id type="hexBinary" length="4">00004252</group_id>
|
||||||
|
<os_mask type="hexBinary" length="32">0000000000000000000000000000000000000000000000000000000000000000</os_mask>
|
||||||
|
</app>
|
97
channel/code/cos.xml
Normal file
97
channel/code/cos.xml
Normal file
@ -0,0 +1,97 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<app type="complex" access="777">
|
||||||
|
<version type="unsignedInt" length="4">1</version>
|
||||||
|
<cmdFlags type="unsignedInt" length="4">0</cmdFlags>
|
||||||
|
<argstr type="string" length="4096">flappy_bird.rpx</argstr>
|
||||||
|
<avail_size type="hexBinary" length="4">00000000</avail_size>
|
||||||
|
<codegen_size type="hexBinary" length="4">00000000</codegen_size>
|
||||||
|
<codegen_core type="hexBinary" length="4">00000001</codegen_core>
|
||||||
|
<max_size type="hexBinary" length="4">40000000</max_size>
|
||||||
|
<max_codesize type="hexBinary" length="4">01000000</max_codesize>
|
||||||
|
<permissions type="complex">
|
||||||
|
<p0 type="complex">
|
||||||
|
<group type="unsignedInt" length="4">1</group>
|
||||||
|
<mask type="hexBinary" length="8">FFFFFFFFFFFFFFFF</mask>
|
||||||
|
</p0>
|
||||||
|
<!--BSP-->
|
||||||
|
<p1 type="complex">
|
||||||
|
<group type="unsignedInt" length="4">3</group>
|
||||||
|
<mask type="hexBinary" length="8">FFFFFFFFFFFFFFFF</mask>
|
||||||
|
</p1>
|
||||||
|
<!--DK -->
|
||||||
|
<p2 type="complex">
|
||||||
|
<group type="unsignedInt" length="4">9</group>
|
||||||
|
<mask type="hexBinary" length="8">FFFFFFFFFFFFFFFF</mask>
|
||||||
|
</p2>
|
||||||
|
<!--USB CLS DRV-->
|
||||||
|
<p3 type="complex">
|
||||||
|
<group type="unsignedInt" length="4">12</group>
|
||||||
|
<mask type="hexBinary" length="8">FFFFFFFFFFFFFFFF</mask>
|
||||||
|
</p3>
|
||||||
|
<!--UHS-->
|
||||||
|
<p4 type="complex">
|
||||||
|
<group type="unsignedInt" length="4">11</group>
|
||||||
|
<mask type="hexBinary" length="8">FFFFFFFFFFFFFFFF</mask>
|
||||||
|
</p4>
|
||||||
|
<!--FS -->
|
||||||
|
<p5 type="complex">
|
||||||
|
<group type="unsignedInt" length="4">13</group>
|
||||||
|
<mask type="hexBinary" length="8">FFFFFFFFFFFFFFFF</mask>
|
||||||
|
</p5>
|
||||||
|
<!--MCP-->
|
||||||
|
<p6 type="complex">
|
||||||
|
<group type="unsignedInt" length="4">14</group>
|
||||||
|
<mask type="hexBinary" length="8">FFFFFFFFFFFFFFFF</mask>
|
||||||
|
</p6>
|
||||||
|
<!--NIM-->
|
||||||
|
<p7 type="complex">
|
||||||
|
<group type="unsignedInt" length="4">15</group>
|
||||||
|
<mask type="hexBinary" length="8">FFFFFFFFFFFFFFFF</mask>
|
||||||
|
</p7>
|
||||||
|
<!--ACT (account)-->
|
||||||
|
<p8 type="complex">
|
||||||
|
<group type="unsignedInt" length="4">16</group>
|
||||||
|
<mask type="hexBinary" length="8">FFFFFFFFFFFFFFFF</mask>
|
||||||
|
</p8>
|
||||||
|
<!--FPD-->
|
||||||
|
<p9 type="complex">
|
||||||
|
<group type="unsignedInt" length="4">17</group>
|
||||||
|
<mask type="hexBinary" length="8">FFFFFFFFFFFFFFFF</mask>
|
||||||
|
</p9>
|
||||||
|
<!--BOSS-->
|
||||||
|
<p10 type="complex">
|
||||||
|
<group type="unsignedInt" length="4">18</group>
|
||||||
|
<mask type="hexBinary" length="8">FFFFFFFFFFFFFFFF</mask>
|
||||||
|
</p10>
|
||||||
|
<!--ACP-->
|
||||||
|
<p11 type="complex">
|
||||||
|
<group type="unsignedInt" length="4">19</group>
|
||||||
|
<mask type="hexBinary" length="8">FFFFFFFFFFFFFFFF</mask>
|
||||||
|
</p11>
|
||||||
|
<!--PDM-->
|
||||||
|
<p12 type="complex">
|
||||||
|
<group type="unsignedInt" length="4">20</group>
|
||||||
|
<mask type="hexBinary" length="8">FFFFFFFFFFFFFFFF</mask>
|
||||||
|
</p12>
|
||||||
|
<!--AC-->
|
||||||
|
<p13 type="complex">
|
||||||
|
<group type="unsignedInt" length="4">21</group>
|
||||||
|
<mask type="hexBinary" length="8">FFFFFFFFFFFFFFFF</mask>
|
||||||
|
</p13>
|
||||||
|
<!--NDM-->
|
||||||
|
<p14 type="complex">
|
||||||
|
<group type="unsignedInt" length="4">22</group>
|
||||||
|
<mask type="hexBinary" length="8">FFFFFFFFFFFFFFFF</mask>
|
||||||
|
</p14>
|
||||||
|
<!--NSEC-->
|
||||||
|
</permissions>
|
||||||
|
<default_stack0_size type="hexBinary" length="4">00000000</default_stack0_size>
|
||||||
|
<default_stack1_size type="hexBinary" length="4">00000000</default_stack1_size>
|
||||||
|
<default_stack2_size type="hexBinary" length="4">00000000</default_stack2_size>
|
||||||
|
<default_redzone0_size type="hexBinary" length="4">00000000</default_redzone0_size>
|
||||||
|
<default_redzone1_size type="hexBinary" length="4">00000000</default_redzone1_size>
|
||||||
|
<default_redzone2_size type="hexBinary" length="4">00000000</default_redzone2_size>
|
||||||
|
<exception_stack0_size type="hexBinary" length="4">00001000</exception_stack0_size>
|
||||||
|
<exception_stack1_size type="hexBinary" length="4">00001000</exception_stack1_size>
|
||||||
|
<exception_stack2_size type="hexBinary" length="4">00001000</exception_stack2_size>
|
||||||
|
</app>
|
1
channel/content/dummy
Normal file
1
channel/content/dummy
Normal file
@ -0,0 +1 @@
|
|||||||
|
s
|
BIN
channel/meta/bootDrcTex.tga
Normal file
BIN
channel/meta/bootDrcTex.tga
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.2 MiB |
BIN
channel/meta/bootLogoTex.tga
Normal file
BIN
channel/meta/bootLogoTex.tga
Normal file
Binary file not shown.
After Width: | Height: | Size: 28 KiB |
BIN
channel/meta/bootMovie.h264
Normal file
BIN
channel/meta/bootMovie.h264
Normal file
Binary file not shown.
BIN
channel/meta/bootSound.btsnd
Normal file
BIN
channel/meta/bootSound.btsnd
Normal file
Binary file not shown.
BIN
channel/meta/bootTvTex.tga
Normal file
BIN
channel/meta/bootTvTex.tga
Normal file
Binary file not shown.
After Width: | Height: | Size: 2.6 MiB |
BIN
channel/meta/iconTex.tga
Normal file
BIN
channel/meta/iconTex.tga
Normal file
Binary file not shown.
After Width: | Height: | Size: 64 KiB |
140
channel/meta/meta.xml
Normal file
140
channel/meta/meta.xml
Normal file
@ -0,0 +1,140 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<menu type="complex" access="777">
|
||||||
|
<version type="unsignedInt" length="4">1</version>
|
||||||
|
<product_code type="string" length="32">WUP-N-RWRE</product_code>
|
||||||
|
<content_platform type="string" length="32">WUP</content_platform>
|
||||||
|
<company_code type="string" length="8">0001</company_code>
|
||||||
|
<mastering_date type="string" length="32"></mastering_date>
|
||||||
|
<logo_type type="unsignedInt" length="4">0</logo_type>
|
||||||
|
<app_launch_type type="hexBinary" length="4">00000000</app_launch_type>
|
||||||
|
<invisible_flag type="hexBinary" length="4">00000000</invisible_flag>
|
||||||
|
<no_managed_flag type="hexBinary" length="4">00000000</no_managed_flag>
|
||||||
|
<no_event_log type="hexBinary" length="4">00000000</no_event_log>
|
||||||
|
<no_icon_database type="hexBinary" length="4">00000000</no_icon_database>
|
||||||
|
<launching_flag type="hexBinary" length="4">00000004</launching_flag>
|
||||||
|
<install_flag type="hexBinary" length="4">00000000</install_flag>
|
||||||
|
<closing_msg type="unsignedInt" length="4">1</closing_msg>
|
||||||
|
<title_version type="unsignedInt" length="4">0</title_version>
|
||||||
|
<title_id type="hexBinary" length="8">0005000046425244</title_id>
|
||||||
|
<group_id type="hexBinary" length="4">00004252</group_id>
|
||||||
|
<boss_id type="hexBinary" length="8">0000000000000000</boss_id>
|
||||||
|
<os_version type="hexBinary" length="8">000500101000400A</os_version>
|
||||||
|
<app_size type="hexBinary" length="8">0000000000000000</app_size>
|
||||||
|
<common_save_size type="hexBinary" length="8">0000000001790000</common_save_size>
|
||||||
|
<account_save_size type="hexBinary" length="8">0000000000000000</account_save_size>
|
||||||
|
<common_boss_size type="hexBinary" length="8">0000000000000000</common_boss_size>
|
||||||
|
<account_boss_size type="hexBinary" length="8">0000000000000000</account_boss_size>
|
||||||
|
<save_no_rollback type="unsignedInt" length="4">0</save_no_rollback>
|
||||||
|
<join_game_id type="hexBinary" length="4">00000000</join_game_id>
|
||||||
|
<join_game_mode_mask type="hexBinary" length="8">0000000000000000</join_game_mode_mask>
|
||||||
|
<bg_daemon_enable type="unsignedInt" length="4">1</bg_daemon_enable>
|
||||||
|
<olv_accesskey type="unsignedInt" length="4">0</olv_accesskey>
|
||||||
|
<wood_tin type="unsignedInt" length="4">0</wood_tin>
|
||||||
|
<e_manual type="unsignedInt" length="4">0</e_manual>
|
||||||
|
<e_manual_version type="unsignedInt" length="4">0</e_manual_version>
|
||||||
|
<region type="hexBinary" length="4">FFFFFFFF</region>
|
||||||
|
<pc_cero type="unsignedInt" length="4">128</pc_cero>
|
||||||
|
<pc_esrb type="unsignedInt" length="4">128</pc_esrb>
|
||||||
|
<pc_bbfc type="unsignedInt" length="4">192</pc_bbfc>
|
||||||
|
<pc_usk type="unsignedInt" length="4">128</pc_usk>
|
||||||
|
<pc_pegi_gen type="unsignedInt" length="4">128</pc_pegi_gen>
|
||||||
|
<pc_pegi_fin type="unsignedInt" length="4">192</pc_pegi_fin>
|
||||||
|
<pc_pegi_prt type="unsignedInt" length="4">128</pc_pegi_prt>
|
||||||
|
<pc_pegi_bbfc type="unsignedInt" length="4">128</pc_pegi_bbfc>
|
||||||
|
<pc_cob type="unsignedInt" length="4">128</pc_cob>
|
||||||
|
<pc_grb type="unsignedInt" length="4">128</pc_grb>
|
||||||
|
<pc_cgsrr type="unsignedInt" length="4">128</pc_cgsrr>
|
||||||
|
<pc_oflc type="unsignedInt" length="4">128</pc_oflc>
|
||||||
|
<pc_reserved0 type="unsignedInt" length="4">192</pc_reserved0>
|
||||||
|
<pc_reserved1 type="unsignedInt" length="4">192</pc_reserved1>
|
||||||
|
<pc_reserved2 type="unsignedInt" length="4">192</pc_reserved2>
|
||||||
|
<pc_reserved3 type="unsignedInt" length="4">192</pc_reserved3>
|
||||||
|
<ext_dev_nunchaku type="unsignedInt" length="4">1</ext_dev_nunchaku>
|
||||||
|
<ext_dev_classic type="unsignedInt" length="4">0</ext_dev_classic>
|
||||||
|
<ext_dev_urcc type="unsignedInt" length="4">1</ext_dev_urcc>
|
||||||
|
<ext_dev_board type="unsignedInt" length="4">0</ext_dev_board>
|
||||||
|
<ext_dev_usb_keyboard type="unsignedInt" length="4">1</ext_dev_usb_keyboard>
|
||||||
|
<ext_dev_etc type="unsignedInt" length="4">0</ext_dev_etc>
|
||||||
|
<ext_dev_etc_name type="string" length="512"></ext_dev_etc_name>
|
||||||
|
<eula_version type="unsignedInt" length="4">0</eula_version>
|
||||||
|
<drc_use type="unsignedInt" length="4">1</drc_use>
|
||||||
|
<network_use type="unsignedInt" length="4">1</network_use>
|
||||||
|
<online_account_use type="unsignedInt" length="4">0</online_account_use>
|
||||||
|
<direct_boot type="unsignedInt" length="4">0</direct_boot>
|
||||||
|
<reserved_flag0 type="hexBinary" length="4">00010001</reserved_flag0>
|
||||||
|
<reserved_flag1 type="hexBinary" length="4">00000000</reserved_flag1>
|
||||||
|
<reserved_flag2 type="hexBinary" length="4">00000000</reserved_flag2>
|
||||||
|
<reserved_flag3 type="hexBinary" length="4">00000000</reserved_flag3>
|
||||||
|
<reserved_flag4 type="hexBinary" length="4">00000000</reserved_flag4>
|
||||||
|
<reserved_flag5 type="hexBinary" length="4">00000000</reserved_flag5>
|
||||||
|
<reserved_flag6 type="hexBinary" length="4">00000003</reserved_flag6>
|
||||||
|
<reserved_flag7 type="hexBinary" length="4">00000000</reserved_flag7>
|
||||||
|
<longname_ja type="string" length="512">Flappy Bird</longname_ja>
|
||||||
|
<longname_en type="string" length="512">Flappy Bird</longname_en>
|
||||||
|
<longname_fr type="string" length="512">Flappy Bird</longname_fr>
|
||||||
|
<longname_de type="string" length="512">Flappy Bird</longname_de>
|
||||||
|
<longname_it type="string" length="512">Flappy Bird</longname_it>
|
||||||
|
<longname_es type="string" length="512">Flappy Bird</longname_es>
|
||||||
|
<longname_zhs type="string" length="512">Flappy Bird</longname_zhs>
|
||||||
|
<longname_ko type="string" length="512">Flappy Bird</longname_ko>
|
||||||
|
<longname_nl type="string" length="512">Flappy Bird</longname_nl>
|
||||||
|
<longname_pt type="string" length="512">Flappy Bird</longname_pt>
|
||||||
|
<longname_ru type="string" length="512">Flappy Bird</longname_ru>
|
||||||
|
<longname_zht type="string" length="512">Flappy Bird</longname_zht>
|
||||||
|
<shortname_ja type="string" length="256">Flappy Bird</shortname_ja>
|
||||||
|
<shortname_en type="string" length="256">Flappy Bird</shortname_en>
|
||||||
|
<shortname_fr type="string" length="256">Flappy Bird</shortname_fr>
|
||||||
|
<shortname_de type="string" length="256">Flappy Bird</shortname_de>
|
||||||
|
<shortname_it type="string" length="256">Flappy Bird</shortname_it>
|
||||||
|
<shortname_es type="string" length="256">Flappy Bird</shortname_es>
|
||||||
|
<shortname_zhs type="string" length="256">Flappy Bird</shortname_zhs>
|
||||||
|
<shortname_ko type="string" length="256">Flappy Bird</shortname_ko>
|
||||||
|
<shortname_nl type="string" length="256">Flappy Bird</shortname_nl>
|
||||||
|
<shortname_pt type="string" length="256">Flappy Bird</shortname_pt>
|
||||||
|
<shortname_ru type="string" length="256">Flappy Bird</shortname_ru>
|
||||||
|
<shortname_zht type="string" length="256">Flappy Bird</shortname_zht>
|
||||||
|
<publisher_ja type="string" length="256">rw-r-r_0644</publisher_ja>
|
||||||
|
<publisher_en type="string" length="256">rw-r-r_0644</publisher_en>
|
||||||
|
<publisher_fr type="string" length="256">rw-r-r_0644</publisher_fr>
|
||||||
|
<publisher_de type="string" length="256">rw-r-r_0644</publisher_de>
|
||||||
|
<publisher_it type="string" length="256">rw-r-r_0644</publisher_it>
|
||||||
|
<publisher_es type="string" length="256">rw-r-r_0644</publisher_es>
|
||||||
|
<publisher_zhs type="string" length="256">rw-r-r_0644</publisher_zhs>
|
||||||
|
<publisher_ko type="string" length="256">rw-r-r_0644</publisher_ko>
|
||||||
|
<publisher_nl type="string" length="256">rw-r-r_0644</publisher_nl>
|
||||||
|
<publisher_pt type="string" length="256">rw-r-r_0644</publisher_pt>
|
||||||
|
<publisher_ru type="string" length="256">rw-r-r_0644</publisher_ru>
|
||||||
|
<publisher_zht type="string" length="256">rw-r-r_0644</publisher_zht>
|
||||||
|
<add_on_unique_id0 type="hexBinary" length="4">00000000</add_on_unique_id0>
|
||||||
|
<add_on_unique_id1 type="hexBinary" length="4">00000000</add_on_unique_id1>
|
||||||
|
<add_on_unique_id2 type="hexBinary" length="4">00000000</add_on_unique_id2>
|
||||||
|
<add_on_unique_id3 type="hexBinary" length="4">00000000</add_on_unique_id3>
|
||||||
|
<add_on_unique_id4 type="hexBinary" length="4">00000000</add_on_unique_id4>
|
||||||
|
<add_on_unique_id5 type="hexBinary" length="4">00000000</add_on_unique_id5>
|
||||||
|
<add_on_unique_id6 type="hexBinary" length="4">00000000</add_on_unique_id6>
|
||||||
|
<add_on_unique_id7 type="hexBinary" length="4">00000000</add_on_unique_id7>
|
||||||
|
<add_on_unique_id8 type="hexBinary" length="4">00000000</add_on_unique_id8>
|
||||||
|
<add_on_unique_id9 type="hexBinary" length="4">00000000</add_on_unique_id9>
|
||||||
|
<add_on_unique_id10 type="hexBinary" length="4">00000000</add_on_unique_id10>
|
||||||
|
<add_on_unique_id11 type="hexBinary" length="4">00000000</add_on_unique_id11>
|
||||||
|
<add_on_unique_id12 type="hexBinary" length="4">00000000</add_on_unique_id12>
|
||||||
|
<add_on_unique_id13 type="hexBinary" length="4">00000000</add_on_unique_id13>
|
||||||
|
<add_on_unique_id14 type="hexBinary" length="4">00000000</add_on_unique_id14>
|
||||||
|
<add_on_unique_id15 type="hexBinary" length="4">00000000</add_on_unique_id15>
|
||||||
|
<add_on_unique_id16 type="hexBinary" length="4">00000000</add_on_unique_id16>
|
||||||
|
<add_on_unique_id17 type="hexBinary" length="4">00000000</add_on_unique_id17>
|
||||||
|
<add_on_unique_id18 type="hexBinary" length="4">00000000</add_on_unique_id18>
|
||||||
|
<add_on_unique_id19 type="hexBinary" length="4">00000000</add_on_unique_id19>
|
||||||
|
<add_on_unique_id20 type="hexBinary" length="4">00000000</add_on_unique_id20>
|
||||||
|
<add_on_unique_id21 type="hexBinary" length="4">00000000</add_on_unique_id21>
|
||||||
|
<add_on_unique_id22 type="hexBinary" length="4">00000000</add_on_unique_id22>
|
||||||
|
<add_on_unique_id23 type="hexBinary" length="4">00000000</add_on_unique_id23>
|
||||||
|
<add_on_unique_id24 type="hexBinary" length="4">00000000</add_on_unique_id24>
|
||||||
|
<add_on_unique_id25 type="hexBinary" length="4">00000000</add_on_unique_id25>
|
||||||
|
<add_on_unique_id26 type="hexBinary" length="4">00000000</add_on_unique_id26>
|
||||||
|
<add_on_unique_id27 type="hexBinary" length="4">00000000</add_on_unique_id27>
|
||||||
|
<add_on_unique_id28 type="hexBinary" length="4">00000000</add_on_unique_id28>
|
||||||
|
<add_on_unique_id29 type="hexBinary" length="4">00000000</add_on_unique_id29>
|
||||||
|
<add_on_unique_id30 type="hexBinary" length="4">00000000</add_on_unique_id30>
|
||||||
|
<add_on_unique_id31 type="hexBinary" length="4">00000000</add_on_unique_id31>
|
||||||
|
</menu>
|
16
filelist.sh
16
filelist.sh
@ -42,15 +42,13 @@ cat <<EOF > $outFile
|
|||||||
#ifndef _FILELIST_H_
|
#ifndef _FILELIST_H_
|
||||||
#define _FILELIST_H_
|
#define _FILELIST_H_
|
||||||
|
|
||||||
#include <gctypes.h>
|
|
||||||
|
|
||||||
typedef struct _RecourceFile
|
typedef struct _RecourceFile
|
||||||
{
|
{
|
||||||
const char *filename;
|
const char *filename;
|
||||||
const u8 *DefaultFile;
|
const unsigned char *DefaultFile;
|
||||||
const u32 &DefaultFileSize;
|
const unsigned int &DefaultFileSize;
|
||||||
u8 *CustomFile;
|
unsigned char *CustomFile;
|
||||||
u32 CustomFileSize;
|
unsigned int CustomFileSize;
|
||||||
} RecourceFile;
|
} RecourceFile;
|
||||||
|
|
||||||
EOF
|
EOF
|
||||||
@ -59,8 +57,8 @@ for i in ${files[@]}
|
|||||||
do
|
do
|
||||||
filename=${i%.*}
|
filename=${i%.*}
|
||||||
extension=${i##*.}
|
extension=${i##*.}
|
||||||
echo 'extern const u8 '$filename'_'$extension'[];' >> $outFile
|
echo 'extern const unsigned char '$filename'_'$extension'[];' >> $outFile
|
||||||
echo 'extern const u32 '$filename'_'$extension'_size;' >> $outFile
|
echo 'extern const unsigned int '$filename'_'$extension'_size;' >> $outFile
|
||||||
echo '' >> $outFile
|
echo '' >> $outFile
|
||||||
done
|
done
|
||||||
|
|
||||||
|
@ -14,24 +14,30 @@
|
|||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
#include <coreinit/core.h>
|
||||||
|
#include <coreinit/foreground.h>
|
||||||
|
#include <proc_ui/procui.h>
|
||||||
|
#include <sysapp/launch.h>
|
||||||
#include "Application.h"
|
#include "Application.h"
|
||||||
#include "common/common.h"
|
#include "common/common.h"
|
||||||
#include "dynamic_libs/os_functions.h"
|
|
||||||
#include "gui/FreeTypeGX.h"
|
#include "gui/FreeTypeGX.h"
|
||||||
#include "gui/VPadController.h"
|
#include "gui/VPadController.h"
|
||||||
#include "gui/WPadController.h"
|
#include "gui/WPadController.h"
|
||||||
#include "resources/Resources.h"
|
#include "resources/Resources.h"
|
||||||
#include "sounds/SoundHandler.hpp"
|
#include "sounds/SoundHandler.hpp"
|
||||||
|
#include "system/memory.h"
|
||||||
#include "utils/logger.h"
|
#include "utils/logger.h"
|
||||||
|
|
||||||
Application *Application::applicationInstance = NULL;
|
Application *Application::applicationInstance = NULL;
|
||||||
bool Application::exitApplication = false;
|
bool Application::exitApplication = false;
|
||||||
|
bool Application::quitRequest = false;
|
||||||
|
|
||||||
Application::Application()
|
Application::Application()
|
||||||
: CThread(CThread::eAttributeAffCore1 | CThread::eAttributePinnedAff, 0, 0x20000)
|
: CThread(CThread::eAttributeAffCore1 | CThread::eAttributePinnedAff, 0, 0x20000)
|
||||||
, bgMusic(NULL)
|
, bgMusic(NULL)
|
||||||
, video(NULL)
|
, video(NULL)
|
||||||
, mainWindow(NULL)
|
, mainWindow(NULL)
|
||||||
|
, fontSystem(NULL)
|
||||||
, exitCode(EXIT_RELAUNCH_ON_LOAD)
|
, exitCode(EXIT_RELAUNCH_ON_LOAD)
|
||||||
{
|
{
|
||||||
controller[0] = new VPadController(GuiTrigger::CHANNEL_1);
|
controller[0] = new VPadController(GuiTrigger::CHANNEL_1);
|
||||||
@ -41,16 +47,18 @@ Application::Application()
|
|||||||
controller[4] = new WPadController(GuiTrigger::CHANNEL_5);
|
controller[4] = new WPadController(GuiTrigger::CHANNEL_5);
|
||||||
|
|
||||||
//! create bgMusic
|
//! create bgMusic
|
||||||
/*
|
// bgMusic = new GuiSound(Resources::GetFile("bgMusic.ogg"), Resources::GetFileSize("bgMusic.ogg"));
|
||||||
bgMusic = new GuiSound(Resources::GetFile("bgMusic.ogg"), Resources::GetFileSize("bgMusic.ogg"));
|
// bgMusic->SetLoop(true);
|
||||||
bgMusic->SetLoop(true);
|
// bgMusic->Play();
|
||||||
bgMusic->Play();
|
// bgMusic->SetVolume(50);
|
||||||
bgMusic->SetVolume(50);*/
|
|
||||||
|
|
||||||
exitApplication = false;
|
exitApplication = false;
|
||||||
|
|
||||||
|
ProcUIInit(OSSavesDone_ReadyToRelease);
|
||||||
}
|
}
|
||||||
|
|
||||||
Application::~Application(){
|
Application::~Application()
|
||||||
|
{
|
||||||
log_printf("Destroy music\n");
|
log_printf("Destroy music\n");
|
||||||
|
|
||||||
delete bgMusic;
|
delete bgMusic;
|
||||||
@ -61,7 +69,6 @@ Application::~Application(){
|
|||||||
delete controller[i];
|
delete controller[i];
|
||||||
|
|
||||||
log_printf("Destroy async deleter\n");
|
log_printf("Destroy async deleter\n");
|
||||||
AsyncDeleter::triggerDeleteProcess();
|
|
||||||
AsyncDeleter::destroyInstance();
|
AsyncDeleter::destroyInstance();
|
||||||
|
|
||||||
log_printf("Clear resources\n");
|
log_printf("Clear resources\n");
|
||||||
@ -69,9 +76,12 @@ Application::~Application(){
|
|||||||
|
|
||||||
log_printf("Stop sound handler\n");
|
log_printf("Stop sound handler\n");
|
||||||
SoundHandler::DestroyInstance();
|
SoundHandler::DestroyInstance();
|
||||||
|
|
||||||
|
ProcUIShutdown();
|
||||||
}
|
}
|
||||||
|
|
||||||
int Application::exec(){
|
int Application::exec()
|
||||||
|
{
|
||||||
//! start main GX2 thread
|
//! start main GX2 thread
|
||||||
resumeThread();
|
resumeThread();
|
||||||
//! now wait for thread to finish
|
//! now wait for thread to finish
|
||||||
@ -80,7 +90,15 @@ int Application::exec(){
|
|||||||
return exitCode;
|
return exitCode;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Application::fadeOut(){
|
void Application::quit(int code)
|
||||||
|
{
|
||||||
|
exitCode = code;
|
||||||
|
exitApplication = true;
|
||||||
|
quitRequest = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Application::fadeOut()
|
||||||
|
{
|
||||||
GuiImage fadeOut(video->getTvWidth(), video->getTvHeight(), (GX2Color){ 0, 0, 0, 255 });
|
GuiImage fadeOut(video->getTvWidth(), video->getTvHeight(), (GX2Color){ 0, 0, 0, 255 });
|
||||||
|
|
||||||
for(int i = 0; i < 255; i += 10)
|
for(int i = 0; i < 255; i += 10)
|
||||||
@ -94,9 +112,9 @@ void Application::fadeOut(){
|
|||||||
video->prepareDrcRendering();
|
video->prepareDrcRendering();
|
||||||
mainWindow->drawDrc(video);
|
mainWindow->drawDrc(video);
|
||||||
|
|
||||||
GX2SetDepthOnlyControl(GX2_DISABLE, GX2_DISABLE, GX2_COMPARE_ALWAYS);
|
GX2SetDepthOnlyControl(GX2_DISABLE, GX2_DISABLE, GX2_COMPARE_FUNC_ALWAYS);
|
||||||
fadeOut.draw(video);
|
fadeOut.draw(video);
|
||||||
GX2SetDepthOnlyControl(GX2_ENABLE, GX2_ENABLE, GX2_COMPARE_LEQUAL);
|
GX2SetDepthOnlyControl(GX2_ENABLE, GX2_ENABLE, GX2_COMPARE_FUNC_LEQUAL);
|
||||||
|
|
||||||
video->drcDrawDone();
|
video->drcDrawDone();
|
||||||
|
|
||||||
@ -105,9 +123,9 @@ void Application::fadeOut(){
|
|||||||
|
|
||||||
mainWindow->drawTv(video);
|
mainWindow->drawTv(video);
|
||||||
|
|
||||||
GX2SetDepthOnlyControl(GX2_DISABLE, GX2_DISABLE, GX2_COMPARE_ALWAYS);
|
GX2SetDepthOnlyControl(GX2_DISABLE, GX2_DISABLE, GX2_COMPARE_FUNC_ALWAYS);
|
||||||
fadeOut.draw(video);
|
fadeOut.draw(video);
|
||||||
GX2SetDepthOnlyControl(GX2_ENABLE, GX2_ENABLE, GX2_COMPARE_LEQUAL);
|
GX2SetDepthOnlyControl(GX2_ENABLE, GX2_ENABLE, GX2_COMPARE_FUNC_LEQUAL);
|
||||||
|
|
||||||
video->tvDrawDone();
|
video->tvDrawDone();
|
||||||
|
|
||||||
@ -127,36 +145,100 @@ void Application::fadeOut(){
|
|||||||
video->drcEnable(false);
|
video->drcEnable(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Application::executeThread(void){
|
bool Application::procUI(void)
|
||||||
log_printf("Initialize video\n");
|
{
|
||||||
video = new CVideo(GX2_TV_SCAN_MODE_720P, GX2_DRC_SINGLE);
|
bool executeProcess = false;
|
||||||
|
|
||||||
log_printf("Video size %i x %i\n", video->getTvWidth(), video->getTvHeight());
|
switch(ProcUIProcessMessages(true))
|
||||||
|
{
|
||||||
|
case PROCUI_STATUS_EXITING:
|
||||||
|
{
|
||||||
|
log_printf("PROCUI_STATUS_EXITING\n");
|
||||||
|
exitCode = EXIT_SUCCESS;
|
||||||
|
exitApplication = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case PROCUI_STATUS_RELEASE_FOREGROUND:
|
||||||
|
{
|
||||||
|
log_printf("PROCUI_STATUS_RELEASE_FOREGROUND\n");
|
||||||
|
if(video != NULL)
|
||||||
|
{
|
||||||
|
// we can turn of the screen but we don't need to and it will display the last image
|
||||||
|
video->tvEnable(true);
|
||||||
|
video->drcEnable(true);
|
||||||
|
|
||||||
//! setup default Font
|
log_printf("delete fontSystem\n");
|
||||||
log_printf("Initialize main font system\n");
|
delete fontSystem;
|
||||||
FreeTypeGX *fontSystem = new FreeTypeGX(Resources::GetFile("font.ttf"), Resources::GetFileSize("font.ttf"), true);
|
fontSystem = NULL;
|
||||||
GuiText::setPresetFont(fontSystem);
|
|
||||||
|
|
||||||
log_printf("Initialize main window\n");
|
log_printf("delete video\n");
|
||||||
|
delete video;
|
||||||
|
video = NULL;
|
||||||
|
|
||||||
mainWindow = new MainWindow(video->getTvWidth(), video->getTvHeight());
|
log_printf("deinitialze memory\n");
|
||||||
|
memoryRelease();
|
||||||
|
ProcUIDrawDoneRelease();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ProcUIDrawDoneRelease();
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case PROCUI_STATUS_IN_FOREGROUND:
|
||||||
|
{
|
||||||
|
if(!quitRequest)
|
||||||
|
{
|
||||||
|
if(video == NULL)
|
||||||
|
{
|
||||||
|
log_printf("PROCUI_STATUS_IN_FOREGROUND\n");
|
||||||
|
log_printf("initialze memory\n");
|
||||||
|
memoryInitialize();
|
||||||
|
|
||||||
|
log_printf("Initialize video\n");
|
||||||
|
video = new CVideo(GX2_TV_SCAN_MODE_720P, GX2_DRC_RENDER_MODE_SINGLE);
|
||||||
|
log_printf("Video size %i x %i\n", video->getTvWidth(), video->getTvHeight());
|
||||||
|
|
||||||
|
//! setup default Font
|
||||||
|
log_printf("Initialize main font system\n");
|
||||||
|
FreeTypeGX *fontSystem = new FreeTypeGX(Resources::GetFile("font.ttf"), Resources::GetFileSize("font.ttf"), true);
|
||||||
|
GuiText::setPresetFont(fontSystem);
|
||||||
|
|
||||||
|
if(mainWindow == NULL)
|
||||||
|
{
|
||||||
|
log_printf("Initialize main window\n");
|
||||||
|
mainWindow = new MainWindow(video->getTvWidth(), video->getTvHeight());
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
executeProcess = true;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case PROCUI_STATUS_IN_BACKGROUND:
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return executeProcess;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Application::executeThread(void)
|
||||||
|
{
|
||||||
log_printf("Entering main loop\n");
|
log_printf("Entering main loop\n");
|
||||||
|
|
||||||
//! main GX2 loop (60 Hz cycle with max priority on core 1)
|
//! main GX2 loop (60 Hz cycle with max priority on core 1)
|
||||||
while(!exitApplication)
|
while(!exitApplication)
|
||||||
{
|
{
|
||||||
|
if(procUI() == false)
|
||||||
|
continue;
|
||||||
|
|
||||||
//! Read out inputs
|
//! Read out inputs
|
||||||
for(int i = 0; i < 5; i++)
|
for(int i = 0; i < 5; i++)
|
||||||
{
|
{
|
||||||
if(controller[i]->update(video->getTvWidth(), video->getTvHeight()) == false)
|
if(controller[i]->update(video->getTvWidth(), video->getTvHeight()) == false)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if(controller[i]->data.buttons_d & VPAD_BUTTON_HOME){
|
|
||||||
exitApplication = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
//! update controller states
|
//! update controller states
|
||||||
mainWindow->update(controller[i]);
|
mainWindow->update(controller[i]);
|
||||||
}
|
}
|
||||||
@ -190,9 +272,24 @@ void Application::executeThread(void){
|
|||||||
AsyncDeleter::triggerDeleteProcess();
|
AsyncDeleter::triggerDeleteProcess();
|
||||||
}
|
}
|
||||||
|
|
||||||
fadeOut();
|
//! in case we exit to a homebrew let's smoothly fade out
|
||||||
|
if(video)
|
||||||
|
{
|
||||||
|
fadeOut();
|
||||||
|
}
|
||||||
|
|
||||||
|
log_printf("delete mainWindow\n");
|
||||||
delete mainWindow;
|
delete mainWindow;
|
||||||
|
mainWindow = NULL;
|
||||||
|
|
||||||
|
log_printf("delete fontSystem\n");
|
||||||
delete fontSystem;
|
delete fontSystem;
|
||||||
|
fontSystem = NULL;
|
||||||
|
|
||||||
|
log_printf("delete video\n");
|
||||||
delete video;
|
delete video;
|
||||||
|
video = NULL;
|
||||||
|
|
||||||
|
log_printf("deinitialze memory\n");
|
||||||
|
memoryRelease();
|
||||||
}
|
}
|
||||||
|
@ -21,6 +21,9 @@
|
|||||||
#include "video/CVideo.h"
|
#include "video/CVideo.h"
|
||||||
#include "system/CThread.h"
|
#include "system/CThread.h"
|
||||||
|
|
||||||
|
// forward declaration
|
||||||
|
class FreeTypeGX;
|
||||||
|
|
||||||
class Application : public CThread
|
class Application : public CThread
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@ -50,22 +53,24 @@ public:
|
|||||||
int exec(void);
|
int exec(void);
|
||||||
void fadeOut(void);
|
void fadeOut(void);
|
||||||
|
|
||||||
void quit(int code) {
|
void quit(int code);
|
||||||
exitCode = code;
|
|
||||||
exitApplication = true;
|
|
||||||
}
|
|
||||||
private:
|
private:
|
||||||
Application();
|
Application();
|
||||||
virtual ~Application();
|
virtual ~Application();
|
||||||
|
|
||||||
|
bool procUI(void);
|
||||||
|
|
||||||
static Application *applicationInstance;
|
static Application *applicationInstance;
|
||||||
static bool exitApplication;
|
static bool exitApplication;
|
||||||
|
static bool quitRequest;
|
||||||
|
|
||||||
void executeThread(void);
|
void executeThread(void);
|
||||||
|
|
||||||
GuiSound *bgMusic;
|
GuiSound *bgMusic;
|
||||||
CVideo *video;
|
CVideo *video;
|
||||||
MainWindow *mainWindow;
|
MainWindow *mainWindow;
|
||||||
|
FreeTypeGX *fontSystem;
|
||||||
GuiController *controller[5];
|
GuiController *controller[5];
|
||||||
int exitCode;
|
int exitCode;
|
||||||
};
|
};
|
||||||
|
@ -7,8 +7,10 @@ extern "C" {
|
|||||||
|
|
||||||
#include "os_defs.h"
|
#include "os_defs.h"
|
||||||
|
|
||||||
|
#define HBL_VERSION_INT 200
|
||||||
|
|
||||||
#define CAFE_OS_SD_PATH "/vol/external01"
|
#define CAFE_OS_SD_PATH "/vol/external01"
|
||||||
#define SD_PATH "sd:"
|
#define SD_PATH "fs:"
|
||||||
#define WIIU_PATH "/wiiu"
|
#define WIIU_PATH "/wiiu"
|
||||||
|
|
||||||
/* Macros for libs */
|
/* Macros for libs */
|
||||||
@ -40,11 +42,19 @@ extern "C" {
|
|||||||
|
|
||||||
#define ELF_DATA_ADDR (*(volatile unsigned int*)(MEM_BASE + 0x1300 + 0x00))
|
#define ELF_DATA_ADDR (*(volatile unsigned int*)(MEM_BASE + 0x1300 + 0x00))
|
||||||
#define ELF_DATA_SIZE (*(volatile unsigned int*)(MEM_BASE + 0x1300 + 0x04))
|
#define ELF_DATA_SIZE (*(volatile unsigned int*)(MEM_BASE + 0x1300 + 0x04))
|
||||||
|
#define HBL_CHANNEL_OFFSET (0x1300 + 0x08)
|
||||||
|
#define HBL_CHANNEL (*(volatile unsigned int*)(MEM_BASE + HBL_CHANNEL_OFFSET))
|
||||||
|
#define RPX_MAX_SIZE (*(volatile unsigned int*)(MEM_BASE + 0x1300 + 0x0C))
|
||||||
|
#define RPX_MAX_CODE_SIZE (*(volatile unsigned int*)(MEM_BASE + 0x1300 + 0x10))
|
||||||
#define MAIN_ENTRY_ADDR (*(volatile unsigned int*)(MEM_BASE + 0x1400 + 0x00))
|
#define MAIN_ENTRY_ADDR (*(volatile unsigned int*)(MEM_BASE + 0x1400 + 0x00))
|
||||||
|
#define OS_FIRMWARE_OFFSET (0x1400 + 0x04)
|
||||||
#define OS_FIRMWARE (*(volatile unsigned int*)(MEM_BASE + 0x1400 + 0x04))
|
#define OS_FIRMWARE (*(volatile unsigned int*)(MEM_BASE + 0x1400 + 0x04))
|
||||||
|
|
||||||
#define OS_SPECIFICS ((OsSpecifics*)(MEM_BASE + 0x1500))
|
#define OS_SPECIFICS ((OsSpecifics*)(MEM_BASE + 0x1500))
|
||||||
|
|
||||||
|
#define MEM_AREA_TABLE ((s_mem_area*)(MEM_BASE + 0x1600))
|
||||||
|
#define APP_BASE_MEM ((unsigned char*)(MEM_BASE + 0x2000))
|
||||||
|
|
||||||
#ifndef EXIT_SUCCESS
|
#ifndef EXIT_SUCCESS
|
||||||
#define EXIT_SUCCESS 0
|
#define EXIT_SUCCESS 0
|
||||||
#endif
|
#endif
|
||||||
|
177
src/common/gx2_ext.h
Normal file
177
src/common/gx2_ext.h
Normal file
@ -0,0 +1,177 @@
|
|||||||
|
#ifndef __GX2_EXTENSION_H
|
||||||
|
#define __GX2_EXTENSION_H
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include <gx2/draw.h>
|
||||||
|
#include <gx2/enum.h>
|
||||||
|
#include <gx2/mem.h>
|
||||||
|
#include <gx2/registers.h>
|
||||||
|
#include <gx2/sampler.h>
|
||||||
|
#include <gx2/shaders.h>
|
||||||
|
#include <gx2/surface.h>
|
||||||
|
#include <gx2/texture.h>
|
||||||
|
|
||||||
|
#define GX2_FALSE 0
|
||||||
|
#define GX2_TRUE 1
|
||||||
|
#define GX2_DISABLE 0
|
||||||
|
#define GX2_ENABLE 1
|
||||||
|
|
||||||
|
#define GX2_COMMAND_BUFFER_SIZE 0x400000
|
||||||
|
#define GX2_SCAN_BUFFER_ALIGNMENT 0x1000
|
||||||
|
#define GX2_CONTEXT_STATE_ALIGNMENT 0x100
|
||||||
|
#define GX2_SHADER_ALIGNMENT 0x100
|
||||||
|
#define GX2_VERTEX_BUFFER_ALIGNMENT 0x40
|
||||||
|
#define GX2_INDEX_BUFFER_ALIGNMENT 0x20
|
||||||
|
|
||||||
|
#define GX2_AA_BUFFER_CLEAR_VALUE 0xCC
|
||||||
|
|
||||||
|
#define GX2_COMP_SEL_NONE 0x04040405
|
||||||
|
#define GX2_COMP_SEL_X001 0x00040405
|
||||||
|
#define GX2_COMP_SEL_XY01 0x00010405
|
||||||
|
#define GX2_COMP_SEL_XYZ1 0x00010205
|
||||||
|
#define GX2_COMP_SEL_XYZW 0x00010203
|
||||||
|
#define GX2_COMP_SEL_XXXX 0x00000000
|
||||||
|
#define GX2_COMP_SEL_YYYY 0x01010101
|
||||||
|
#define GX2_COMP_SEL_ZZZZ 0x02020202
|
||||||
|
#define GX2_COMP_SEL_WWWW 0x03030303
|
||||||
|
#define GX2_COMP_SEL_WZYX 0x03020100
|
||||||
|
#define GX2_COMP_SEL_WXYZ 0x03000102
|
||||||
|
|
||||||
|
static const u32 attribute_dest_comp_selector[20] = {
|
||||||
|
GX2_COMP_SEL_X001, GX2_COMP_SEL_XY01, GX2_COMP_SEL_X001, GX2_COMP_SEL_X001, GX2_COMP_SEL_XY01, GX2_COMP_SEL_X001,
|
||||||
|
GX2_COMP_SEL_X001, GX2_COMP_SEL_XY01, GX2_COMP_SEL_XY01, GX2_COMP_SEL_XYZ1, GX2_COMP_SEL_XYZW, GX2_COMP_SEL_XYZW,
|
||||||
|
GX2_COMP_SEL_XY01, GX2_COMP_SEL_XY01, GX2_COMP_SEL_XYZW, GX2_COMP_SEL_XYZW, GX2_COMP_SEL_XYZ1, GX2_COMP_SEL_XYZ1,
|
||||||
|
GX2_COMP_SEL_XYZW, GX2_COMP_SEL_XYZW
|
||||||
|
};
|
||||||
|
|
||||||
|
static const u32 texture_comp_selector[54] = {
|
||||||
|
GX2_COMP_SEL_NONE, GX2_COMP_SEL_X001, GX2_COMP_SEL_XY01, GX2_COMP_SEL_NONE, GX2_COMP_SEL_NONE, GX2_COMP_SEL_X001,
|
||||||
|
GX2_COMP_SEL_X001, GX2_COMP_SEL_XY01, GX2_COMP_SEL_XYZ1, GX2_COMP_SEL_XYZ1, GX2_COMP_SEL_XYZW, GX2_COMP_SEL_XYZW,
|
||||||
|
GX2_COMP_SEL_WZYX, GX2_COMP_SEL_X001, GX2_COMP_SEL_X001, GX2_COMP_SEL_XY01, GX2_COMP_SEL_XY01, GX2_COMP_SEL_NONE,
|
||||||
|
GX2_COMP_SEL_NONE, GX2_COMP_SEL_NONE, GX2_COMP_SEL_NONE, GX2_COMP_SEL_NONE, GX2_COMP_SEL_XYZ1, GX2_COMP_SEL_NONE,
|
||||||
|
GX2_COMP_SEL_NONE, GX2_COMP_SEL_XYZW, GX2_COMP_SEL_XYZW, GX2_COMP_SEL_WZYX, GX2_COMP_SEL_XY01, GX2_COMP_SEL_XY01,
|
||||||
|
GX2_COMP_SEL_XY01, GX2_COMP_SEL_XYZW, GX2_COMP_SEL_XYZW, GX2_COMP_SEL_NONE, GX2_COMP_SEL_XYZW, GX2_COMP_SEL_XYZW,
|
||||||
|
GX2_COMP_SEL_NONE, GX2_COMP_SEL_NONE, GX2_COMP_SEL_NONE, GX2_COMP_SEL_XYZ1, GX2_COMP_SEL_XYZ1, GX2_COMP_SEL_X001,
|
||||||
|
GX2_COMP_SEL_XY01, GX2_COMP_SEL_XYZ1, GX2_COMP_SEL_NONE, GX2_COMP_SEL_NONE, GX2_COMP_SEL_NONE, GX2_COMP_SEL_XYZ1,
|
||||||
|
GX2_COMP_SEL_XYZ1, GX2_COMP_SEL_XYZW, GX2_COMP_SEL_XYZW, GX2_COMP_SEL_XYZW, GX2_COMP_SEL_X001, GX2_COMP_SEL_XY01
|
||||||
|
};
|
||||||
|
|
||||||
|
typedef struct _GX2Color {
|
||||||
|
u8 r, g, b, a;
|
||||||
|
} GX2Color;
|
||||||
|
|
||||||
|
typedef struct _GX2ColorF32 {
|
||||||
|
f32 r, g, b, a;
|
||||||
|
} GX2ColorF32;
|
||||||
|
|
||||||
|
static inline void GX2InitDepthBuffer(GX2DepthBuffer *depthBuffer, GX2SurfaceDim dim, u32 width, u32 height, u32 depth, GX2SurfaceFormat format, GX2AAMode aa)
|
||||||
|
{
|
||||||
|
depthBuffer->surface.dim = dim;
|
||||||
|
depthBuffer->surface.width = width;
|
||||||
|
depthBuffer->surface.height = height;
|
||||||
|
depthBuffer->surface.depth = depth;
|
||||||
|
depthBuffer->surface.mipLevels = 1;
|
||||||
|
depthBuffer->surface.format = format;
|
||||||
|
depthBuffer->surface.aa = aa;
|
||||||
|
depthBuffer->surface.use = (GX2SurfaceUse)(((format==GX2_SURFACE_FORMAT_UNORM_R24_X8) || (format==GX2_SURFACE_FORMAT_FLOAT_D24_S8)) ?
|
||||||
|
GX2_SURFACE_USE_DEPTH_BUFFER : (GX2_SURFACE_USE_DEPTH_BUFFER | GX2_SURFACE_USE_TEXTURE));
|
||||||
|
depthBuffer->surface.tileMode = GX2_TILE_MODE_DEFAULT;
|
||||||
|
depthBuffer->surface.swizzle = 0;
|
||||||
|
depthBuffer->viewMip = 0;
|
||||||
|
depthBuffer->viewFirstSlice = 0;
|
||||||
|
depthBuffer->viewNumSlices = depth;
|
||||||
|
depthBuffer->depthClear = 1.0f;
|
||||||
|
depthBuffer->stencilClear = 0;
|
||||||
|
depthBuffer->hiZPtr = NULL;
|
||||||
|
depthBuffer->hiZSize = 0;
|
||||||
|
GX2CalcSurfaceSizeAndAlignment(&depthBuffer->surface);
|
||||||
|
GX2InitDepthBufferRegs(depthBuffer);
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline void GX2InitColorBuffer(GX2ColorBuffer *colorBuffer, GX2SurfaceDim dim, u32 width, u32 height, u32 depth, GX2SurfaceFormat format, GX2AAMode aa)
|
||||||
|
{
|
||||||
|
colorBuffer->surface.dim = dim;
|
||||||
|
colorBuffer->surface.width = width;
|
||||||
|
colorBuffer->surface.height = height;
|
||||||
|
colorBuffer->surface.depth = depth;
|
||||||
|
colorBuffer->surface.mipLevels = 1;
|
||||||
|
colorBuffer->surface.format = format;
|
||||||
|
colorBuffer->surface.aa = aa;
|
||||||
|
colorBuffer->surface.use = GX2_SURFACE_USE_TEXTURE_COLOR_BUFFER_TV;
|
||||||
|
colorBuffer->surface.imageSize = 0;
|
||||||
|
colorBuffer->surface.image = NULL;
|
||||||
|
colorBuffer->surface.mipmapSize = 0;
|
||||||
|
colorBuffer->surface.mipmaps = NULL;
|
||||||
|
colorBuffer->surface.tileMode = GX2_TILE_MODE_DEFAULT;
|
||||||
|
colorBuffer->surface.swizzle = 0;
|
||||||
|
colorBuffer->surface.alignment = 0;
|
||||||
|
colorBuffer->surface.pitch = 0;
|
||||||
|
u32 i;
|
||||||
|
for(i = 0; i < 13; i++)
|
||||||
|
colorBuffer->surface.mipLevelOffset[i] = 0;
|
||||||
|
colorBuffer->viewMip = 0;
|
||||||
|
colorBuffer->viewFirstSlice = 0;
|
||||||
|
colorBuffer->viewNumSlices = depth;
|
||||||
|
colorBuffer->aaBuffer = NULL;
|
||||||
|
colorBuffer->aaSize = 0;
|
||||||
|
for(i = 0; i < 5; i++)
|
||||||
|
colorBuffer->regs[i] = 0;
|
||||||
|
|
||||||
|
GX2CalcSurfaceSizeAndAlignment(&colorBuffer->surface);
|
||||||
|
GX2InitColorBufferRegs(colorBuffer);
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline void GX2InitAttribStream(GX2AttribStream* attr, u32 location, u32 buffer, u32 offset, GX2AttribFormat format)
|
||||||
|
{
|
||||||
|
attr->location = location;
|
||||||
|
attr->buffer = buffer;
|
||||||
|
attr->offset = offset;
|
||||||
|
attr->format = format;
|
||||||
|
attr->type = GX2_ATTRIB_INDEX_PER_VERTEX;
|
||||||
|
attr->aluDivisor = 0;
|
||||||
|
attr->mask = attribute_dest_comp_selector[format & 0xff];
|
||||||
|
attr->endianSwap = GX2_ENDIAN_SWAP_DEFAULT;
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline void GX2InitTexture(GX2Texture *tex, u32 width, u32 height, u32 depth, u32 mipLevels, GX2SurfaceFormat format, GX2SurfaceDim dim, GX2TileMode tile)
|
||||||
|
{
|
||||||
|
tex->surface.dim = dim;
|
||||||
|
tex->surface.width = width;
|
||||||
|
tex->surface.height = height;
|
||||||
|
tex->surface.depth = depth;
|
||||||
|
tex->surface.mipLevels = mipLevels;
|
||||||
|
tex->surface.format = format;
|
||||||
|
tex->surface.aa = GX2_AA_MODE1X;
|
||||||
|
tex->surface.use = GX2_SURFACE_USE_TEXTURE;
|
||||||
|
tex->surface.imageSize = 0;
|
||||||
|
tex->surface.image = NULL;
|
||||||
|
tex->surface.mipmapSize = 0;
|
||||||
|
tex->surface.mipmaps = NULL;
|
||||||
|
tex->surface.tileMode = tile;
|
||||||
|
tex->surface.swizzle = 0;
|
||||||
|
tex->surface.alignment = 0;
|
||||||
|
tex->surface.pitch = 0;
|
||||||
|
u32 i;
|
||||||
|
for(i = 0; i < 13; i++)
|
||||||
|
tex->surface.mipLevelOffset[i] = 0;
|
||||||
|
tex->viewFirstMip = 0;
|
||||||
|
tex->viewNumMips = mipLevels;
|
||||||
|
tex->viewFirstSlice = 0;
|
||||||
|
tex->viewNumSlices = depth;
|
||||||
|
tex->compMap = texture_comp_selector[format & 0x3f];
|
||||||
|
for(i = 0; i < 5; i++)
|
||||||
|
tex->regs[i] = 0;
|
||||||
|
|
||||||
|
GX2CalcSurfaceSizeAndAlignment(&tex->surface);
|
||||||
|
GX2InitTextureRegs(tex);
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* COMMON_H */
|
||||||
|
|
@ -16,8 +16,23 @@ typedef struct _OsSpecifics
|
|||||||
unsigned int addr_KernSyscallTbl3;
|
unsigned int addr_KernSyscallTbl3;
|
||||||
unsigned int addr_KernSyscallTbl4;
|
unsigned int addr_KernSyscallTbl4;
|
||||||
unsigned int addr_KernSyscallTbl5;
|
unsigned int addr_KernSyscallTbl5;
|
||||||
|
|
||||||
|
int (*LiWaitIopComplete)(int, int *);
|
||||||
|
int (*LiWaitIopCompleteWithInterrupts)(int, int *);
|
||||||
|
unsigned int addr_LiWaitOneChunk;
|
||||||
|
unsigned int addr_PrepareTitle_hook;
|
||||||
|
unsigned int addr_sgIsLoadingBuffer;
|
||||||
|
unsigned int addr_gDynloadInitialized;
|
||||||
|
unsigned int orig_LiWaitOneChunkInstr;
|
||||||
} OsSpecifics;
|
} OsSpecifics;
|
||||||
|
|
||||||
|
typedef struct _s_mem_area
|
||||||
|
{
|
||||||
|
unsigned int address;
|
||||||
|
unsigned int size;
|
||||||
|
struct _s_mem_area* next;
|
||||||
|
} s_mem_area;
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
#ifndef TYPES_H
|
#ifndef TYPES_H
|
||||||
#define TYPES_H
|
#define TYPES_H
|
||||||
|
|
||||||
#include <gctypes.h>
|
#include <wut_types.h>
|
||||||
|
|
||||||
#endif /* TYPES_H */
|
#endif /* TYPES_H */
|
||||||
|
|
||||||
|
@ -1,2 +0,0 @@
|
|||||||
# dynamic_libs
|
|
||||||
Dynamic libs for WiiU homebrew
|
|
@ -1,40 +0,0 @@
|
|||||||
/****************************************************************************
|
|
||||||
* Copyright (C) 2015
|
|
||||||
* by Dimok
|
|
||||||
*
|
|
||||||
* This software is provided 'as-is', without any express or implied
|
|
||||||
* warranty. In no event will the authors be held liable for any
|
|
||||||
* damages arising from the use of this software.
|
|
||||||
*
|
|
||||||
* Permission is granted to anyone to use this software for any
|
|
||||||
* purpose, including commercial applications, and to alter it and
|
|
||||||
* redistribute it freely, subject to the following restrictions:
|
|
||||||
*
|
|
||||||
* 1. The origin of this software must not be misrepresented; you
|
|
||||||
* must not claim that you wrote the original software. If you use
|
|
||||||
* this software in a product, an acknowledgment in the product
|
|
||||||
* documentation would be appreciated but is not required.
|
|
||||||
*
|
|
||||||
* 2. Altered source versions must be plainly marked as such, and
|
|
||||||
* must not be misrepresented as being the original software.
|
|
||||||
*
|
|
||||||
* 3. This notice may not be removed or altered from any source
|
|
||||||
* distribution.
|
|
||||||
***************************************************************************/
|
|
||||||
#include "os_functions.h"
|
|
||||||
#include "acp_functions.h"
|
|
||||||
|
|
||||||
unsigned int acp_handle __attribute__((section(".data"))) = 0;
|
|
||||||
|
|
||||||
EXPORT_DECL(void, GetMetaXml, void * _ACPMetaXml);
|
|
||||||
|
|
||||||
void InitAcquireACP(void)
|
|
||||||
{
|
|
||||||
OSDynLoad_Acquire("nn_acp.rpl", &acp_handle);
|
|
||||||
}
|
|
||||||
|
|
||||||
void InitACPFunctionPointers(void)
|
|
||||||
{
|
|
||||||
InitAcquireACP();
|
|
||||||
OSDynLoad_FindExport(acp_handle,0,"GetMetaXml__Q2_2nn3acpFP11_ACPMetaXml",&GetMetaXml);
|
|
||||||
}
|
|
@ -1,42 +0,0 @@
|
|||||||
/****************************************************************************
|
|
||||||
* Copyright (C) 2015
|
|
||||||
* by Dimok
|
|
||||||
*
|
|
||||||
* This software is provided 'as-is', without any express or implied
|
|
||||||
* warranty. In no event will the authors be held liable for any
|
|
||||||
* damages arising from the use of this software.
|
|
||||||
*
|
|
||||||
* Permission is granted to anyone to use this software for any
|
|
||||||
* purpose, including commercial applications, and to alter it and
|
|
||||||
* redistribute it freely, subject to the following restrictions:
|
|
||||||
*
|
|
||||||
* 1. The origin of this software must not be misrepresented; you
|
|
||||||
* must not claim that you wrote the original software. If you use
|
|
||||||
* this software in a product, an acknowledgment in the product
|
|
||||||
* documentation would be appreciated but is not required.
|
|
||||||
*
|
|
||||||
* 2. Altered source versions must be plainly marked as such, and
|
|
||||||
* must not be misrepresented as being the original software.
|
|
||||||
*
|
|
||||||
* 3. This notice may not be removed or altered from any source
|
|
||||||
* distribution.
|
|
||||||
***************************************************************************/
|
|
||||||
#ifndef __ACP_FUNCTIONS_H_
|
|
||||||
#define __ACP_FUNCTIONS_H_
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
extern "C" {
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include <gctypes.h>
|
|
||||||
|
|
||||||
extern unsigned int acp_handle;
|
|
||||||
|
|
||||||
void InitACPFunctionPointers(void);
|
|
||||||
void InitAcquireACP(void);
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif // __VPAD_FUNCTIONS_H_
|
|
@ -1,58 +0,0 @@
|
|||||||
/****************************************************************************
|
|
||||||
* Copyright (C) 2015
|
|
||||||
* by Dimok
|
|
||||||
*
|
|
||||||
* This software is provided 'as-is', without any express or implied
|
|
||||||
* warranty. In no event will the authors be held liable for any
|
|
||||||
* damages arising from the use of this software.
|
|
||||||
*
|
|
||||||
* Permission is granted to anyone to use this software for any
|
|
||||||
* purpose, including commercial applications, and to alter it and
|
|
||||||
* redistribute it freely, subject to the following restrictions:
|
|
||||||
*
|
|
||||||
* 1. The origin of this software must not be misrepresented; you
|
|
||||||
* must not claim that you wrote the original software. If you use
|
|
||||||
* this software in a product, an acknowledgment in the product
|
|
||||||
* documentation would be appreciated but is not required.
|
|
||||||
*
|
|
||||||
* 2. Altered source versions must be plainly marked as such, and
|
|
||||||
* must not be misrepresented as being the original software.
|
|
||||||
*
|
|
||||||
* 3. This notice may not be removed or altered from any source
|
|
||||||
* distribution.
|
|
||||||
***************************************************************************/
|
|
||||||
#include "os_functions.h"
|
|
||||||
#include "aoc_functions.h"
|
|
||||||
|
|
||||||
unsigned int aoc_handle __attribute__((section(".data"))) = 0;
|
|
||||||
|
|
||||||
EXPORT_DECL(s32, AOC_Initialize, void);
|
|
||||||
EXPORT_DECL(s32, AOC_Finalize, void);
|
|
||||||
EXPORT_DECL(u32, AOC_CalculateWorkBufferSize, u32 num_titles);
|
|
||||||
EXPORT_DECL(s32, AOC_ListTitle, u32 * num_titles, void * titles, u32 max_titles, void * buffer, u32 buffer_size);
|
|
||||||
EXPORT_DECL(s32, AOC_OpenTitle, char* aoc_path, void * title, void * buffer, u32 buffer_size);
|
|
||||||
EXPORT_DECL(s32, AOC_CloseTitle, void * title);
|
|
||||||
EXPORT_DECL(s32, AOC_DeleteContent, u64 title_id, u16 contentIndexes[], u32 numberOfContent, void* buffer, u32 buffer_size);
|
|
||||||
EXPORT_DECL(s32, AOC_GetPurchaseInfo, u32 * bResult, u64 title_id, u16 contentIndexes[], u32 numberOfContent, void * buffer, u32 buffer_size);
|
|
||||||
|
|
||||||
void InitAcquireAoc(void)
|
|
||||||
{
|
|
||||||
OSDynLoad_Acquire("nn_aoc.rpl", &aoc_handle);
|
|
||||||
}
|
|
||||||
|
|
||||||
void InitAocFunctionPointers(void)
|
|
||||||
{
|
|
||||||
InitAcquireAoc();
|
|
||||||
if(aoc_handle == 0)
|
|
||||||
return;
|
|
||||||
|
|
||||||
//! assigning those is not mandatory and it does not always work to load them
|
|
||||||
OSDynLoad_FindExport(aoc_handle, 0, "AOC_Initialize", &AOC_Initialize);
|
|
||||||
OSDynLoad_FindExport(aoc_handle, 0, "AOC_Finalize", &AOC_Finalize);
|
|
||||||
OSDynLoad_FindExport(aoc_handle, 0, "AOC_CalculateWorkBufferSize", &AOC_CalculateWorkBufferSize);
|
|
||||||
OSDynLoad_FindExport(aoc_handle, 0, "AOC_ListTitle", &AOC_ListTitle);
|
|
||||||
OSDynLoad_FindExport(aoc_handle, 0, "AOC_OpenTitle", &AOC_OpenTitle);
|
|
||||||
OSDynLoad_FindExport(aoc_handle, 0, "AOC_CloseTitle", &AOC_CloseTitle);
|
|
||||||
OSDynLoad_FindExport(aoc_handle, 0, "AOC_DeleteContent", &AOC_DeleteContent);
|
|
||||||
OSDynLoad_FindExport(aoc_handle, 0, "AOC_GetPurchaseInfo", &AOC_GetPurchaseInfo);
|
|
||||||
}
|
|
@ -1,58 +0,0 @@
|
|||||||
/****************************************************************************
|
|
||||||
* Copyright (C) 2015
|
|
||||||
* by Dimok
|
|
||||||
*
|
|
||||||
* This software is provided 'as-is', without any express or implied
|
|
||||||
* warranty. In no event will the authors be held liable for any
|
|
||||||
* damages arising from the use of this software.
|
|
||||||
*
|
|
||||||
* Permission is granted to anyone to use this software for any
|
|
||||||
* purpose, including commercial applications, and to alter it and
|
|
||||||
* redistribute it freely, subject to the following restrictions:
|
|
||||||
*
|
|
||||||
* 1. The origin of this software must not be misrepresented; you
|
|
||||||
* must not claim that you wrote the original software. If you use
|
|
||||||
* this software in a product, an acknowledgment in the product
|
|
||||||
* documentation would be appreciated but is not required.
|
|
||||||
*
|
|
||||||
* 2. Altered source versions must be plainly marked as such, and
|
|
||||||
* must not be misrepresented as being the original software.
|
|
||||||
*
|
|
||||||
* 3. This notice may not be removed or altered from any source
|
|
||||||
* distribution.
|
|
||||||
***************************************************************************/
|
|
||||||
#ifndef __AOC_FUNCTIONS_H_
|
|
||||||
#define __AOC_FUNCTIONS_H_
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
extern "C" {
|
|
||||||
#endif
|
|
||||||
|
|
||||||
extern unsigned int aoc_handle;
|
|
||||||
|
|
||||||
#define AOC_TITLE_SIZE 104
|
|
||||||
|
|
||||||
typedef struct {
|
|
||||||
u64 title_ID;
|
|
||||||
u32 group_ID;
|
|
||||||
u16 version;
|
|
||||||
char path[88];
|
|
||||||
} AOC_TitleListType;
|
|
||||||
|
|
||||||
|
|
||||||
void InitAocFunctionPointers(void);
|
|
||||||
void InitAcquireAoc(void);
|
|
||||||
|
|
||||||
extern s32 (* AOC_Initialize)(void);
|
|
||||||
extern s32 (* AOC_Finalize)(void);
|
|
||||||
extern u32 (* AOC_CalculateWorkBufferSize)(u32 num_titles);
|
|
||||||
extern s32 (* AOC_ListTitle)(u32 * num_titles, void * titles, u32 max_titles, void * buffer, u32 buffer_size);
|
|
||||||
extern s32 (* AOC_OpenTitle)(char* aoc_path, void * title, void * buffer, u32 buffer_size);
|
|
||||||
extern s32 (* AOC_CloseTitle)(void * title);
|
|
||||||
extern s32 (* AOC_DeleteContent)(u64 title_id, u16 contentIndexes[], u32 numberOfContent, void * buffer, u32 buffer_size);
|
|
||||||
extern s32 (* AOC_GetPurchaseInfo)(u32 * bResult, u64 title_id, u16 contentIndexes[], u32 numberOfContent, void * buffer, u32 buffer_size);
|
|
||||||
#ifdef __cplusplus
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif // __AOC_FUNCTIONS_H_
|
|
@ -1,118 +0,0 @@
|
|||||||
/****************************************************************************
|
|
||||||
* Copyright (C) 2015
|
|
||||||
* by Dimok
|
|
||||||
*
|
|
||||||
* This software is provided 'as-is', without any express or implied
|
|
||||||
* warranty. In no event will the authors be held liable for any
|
|
||||||
* damages arising from the use of this software.
|
|
||||||
*
|
|
||||||
* Permission is granted to anyone to use this software for any
|
|
||||||
* purpose, including commercial applications, and to alter it and
|
|
||||||
* redistribute it freely, subject to the following restrictions:
|
|
||||||
*
|
|
||||||
* 1. The origin of this software must not be misrepresented; you
|
|
||||||
* must not claim that you wrote the original software. If you use
|
|
||||||
* this software in a product, an acknowledgment in the product
|
|
||||||
* documentation would be appreciated but is not required.
|
|
||||||
*
|
|
||||||
* 2. Altered source versions must be plainly marked as such, and
|
|
||||||
* must not be misrepresented as being the original software.
|
|
||||||
*
|
|
||||||
* 3. This notice may not be removed or altered from any source
|
|
||||||
* distribution.
|
|
||||||
***************************************************************************/
|
|
||||||
#include "common/common.h"
|
|
||||||
#include "os_functions.h"
|
|
||||||
#include "ax_functions.h"
|
|
||||||
|
|
||||||
unsigned int sound_handle __attribute__((section(".data"))) = 0;
|
|
||||||
|
|
||||||
EXPORT_DECL(void, AXInitWithParams, u32 * params);
|
|
||||||
EXPORT_DECL(void, AXInit, void);
|
|
||||||
EXPORT_DECL(void, AXQuit, void);
|
|
||||||
EXPORT_DECL(u32, AXGetInputSamplesPerSec, void);
|
|
||||||
EXPORT_DECL(u32, AXGetInputSamplesPerFrame, void);
|
|
||||||
EXPORT_DECL(s32, AXVoiceBegin, void *v);
|
|
||||||
EXPORT_DECL(s32, AXVoiceEnd, void *v);
|
|
||||||
EXPORT_DECL(void, AXSetVoiceType, void *v, u16 type);
|
|
||||||
EXPORT_DECL(void, AXSetVoiceOffsets, void *v, const void *buf);
|
|
||||||
EXPORT_DECL(void, AXSetVoiceSrcType, void *v, u32 type);
|
|
||||||
EXPORT_DECL(void, AXSetVoiceVe, void *v, const void *vol);
|
|
||||||
EXPORT_DECL(s32, AXSetVoiceDeviceMix, void *v, s32 device, u32 id, void *mix);
|
|
||||||
EXPORT_DECL(void, AXSetVoiceState, void *v, u16 state);
|
|
||||||
EXPORT_DECL(void, AXSetVoiceSrc, void *v, const void *src);
|
|
||||||
EXPORT_DECL(s32, AXSetVoiceSrcRatio, void *v,f32 ratio)
|
|
||||||
EXPORT_DECL(void *, AXAcquireVoice, u32 prio, void * callback, u32 arg);
|
|
||||||
EXPORT_DECL(void, AXFreeVoice, void *v);
|
|
||||||
EXPORT_DECL(void, AXRegisterFrameCallback, void * callback);
|
|
||||||
EXPORT_DECL(u32, AXGetVoiceLoopCount, void *v);
|
|
||||||
EXPORT_DECL(void, AXSetVoiceEndOffset, void *v, u32 offset);
|
|
||||||
EXPORT_DECL(void, AXSetVoiceLoopOffset, void *v, u32 offset);
|
|
||||||
|
|
||||||
void InitAcquireAX(void)
|
|
||||||
{
|
|
||||||
unsigned int *funcPointer = 0;
|
|
||||||
|
|
||||||
if(OS_FIRMWARE >= 400)
|
|
||||||
{
|
|
||||||
AXInit = 0;
|
|
||||||
|
|
||||||
OSDynLoad_Acquire("sndcore2.rpl", &sound_handle);
|
|
||||||
OS_FIND_EXPORT(sound_handle, AXInitWithParams);
|
|
||||||
OS_FIND_EXPORT(sound_handle, AXGetInputSamplesPerSec);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
AXInitWithParams = 0;
|
|
||||||
AXGetInputSamplesPerSec = 0;
|
|
||||||
|
|
||||||
OSDynLoad_Acquire("snd_core.rpl", &sound_handle);
|
|
||||||
OS_FIND_EXPORT(sound_handle, AXInit);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void InitAXFunctionPointers(void)
|
|
||||||
{
|
|
||||||
unsigned int *funcPointer = 0;
|
|
||||||
|
|
||||||
InitAcquireAX();
|
|
||||||
|
|
||||||
OS_FIND_EXPORT(sound_handle, AXQuit);
|
|
||||||
OS_FIND_EXPORT(sound_handle, AXVoiceBegin);
|
|
||||||
OS_FIND_EXPORT(sound_handle, AXVoiceEnd);
|
|
||||||
OS_FIND_EXPORT(sound_handle, AXSetVoiceType);
|
|
||||||
OS_FIND_EXPORT(sound_handle, AXSetVoiceOffsets);
|
|
||||||
OS_FIND_EXPORT(sound_handle, AXSetVoiceSrcType);
|
|
||||||
OS_FIND_EXPORT(sound_handle, AXSetVoiceVe);
|
|
||||||
OS_FIND_EXPORT(sound_handle, AXSetVoiceDeviceMix);
|
|
||||||
OS_FIND_EXPORT(sound_handle, AXSetVoiceState);
|
|
||||||
OS_FIND_EXPORT(sound_handle, AXSetVoiceSrc);
|
|
||||||
OS_FIND_EXPORT(sound_handle, AXSetVoiceSrcRatio);
|
|
||||||
OS_FIND_EXPORT(sound_handle, AXAcquireVoice);
|
|
||||||
OS_FIND_EXPORT(sound_handle, AXFreeVoice);
|
|
||||||
OS_FIND_EXPORT(sound_handle, AXRegisterFrameCallback);
|
|
||||||
OS_FIND_EXPORT(sound_handle, AXGetVoiceLoopCount);
|
|
||||||
OS_FIND_EXPORT(sound_handle, AXSetVoiceEndOffset);
|
|
||||||
OS_FIND_EXPORT(sound_handle, AXSetVoiceLoopOffset);
|
|
||||||
}
|
|
||||||
|
|
||||||
void ProperlyEndTransitionAudio(void)
|
|
||||||
{
|
|
||||||
bool (* check_os_audio_transition_flag_old)(void);
|
|
||||||
void (* AXInit_old)(void);
|
|
||||||
void (* AXQuit_old)(void);
|
|
||||||
|
|
||||||
unsigned int *funcPointer = 0;
|
|
||||||
unsigned int sound_handle;
|
|
||||||
OSDynLoad_Acquire("snd_core.rpl", &sound_handle);
|
|
||||||
|
|
||||||
OS_FIND_EXPORT_EX(sound_handle, check_os_audio_transition_flag, check_os_audio_transition_flag_old);
|
|
||||||
OS_FIND_EXPORT_EX(sound_handle, AXInit, AXInit_old);
|
|
||||||
OS_FIND_EXPORT_EX(sound_handle, AXQuit, AXQuit_old);
|
|
||||||
|
|
||||||
if (check_os_audio_transition_flag_old())
|
|
||||||
{
|
|
||||||
AXInit_old();
|
|
||||||
AXQuit_old();
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,64 +0,0 @@
|
|||||||
/****************************************************************************
|
|
||||||
* Copyright (C) 2015
|
|
||||||
* by Dimok
|
|
||||||
*
|
|
||||||
* This software is provided 'as-is', without any express or implied
|
|
||||||
* warranty. In no event will the authors be held liable for any
|
|
||||||
* damages arising from the use of this software.
|
|
||||||
*
|
|
||||||
* Permission is granted to anyone to use this software for any
|
|
||||||
* purpose, including commercial applications, and to alter it and
|
|
||||||
* redistribute it freely, subject to the following restrictions:
|
|
||||||
*
|
|
||||||
* 1. The origin of this software must not be misrepresented; you
|
|
||||||
* must not claim that you wrote the original software. If you use
|
|
||||||
* this software in a product, an acknowledgment in the product
|
|
||||||
* documentation would be appreciated but is not required.
|
|
||||||
*
|
|
||||||
* 2. Altered source versions must be plainly marked as such, and
|
|
||||||
* must not be misrepresented as being the original software.
|
|
||||||
*
|
|
||||||
* 3. This notice may not be removed or altered from any source
|
|
||||||
* distribution.
|
|
||||||
***************************************************************************/
|
|
||||||
#ifndef __AX_FUNCTIONS_H_
|
|
||||||
#define __AX_FUNCTIONS_H_
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
extern "C" {
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include <gctypes.h>
|
|
||||||
|
|
||||||
extern unsigned int sound_handle;
|
|
||||||
|
|
||||||
void InitAXFunctionPointers(void);
|
|
||||||
void InitAcquireAX(void);
|
|
||||||
void ProperlyEndTransitionAudio(void);
|
|
||||||
|
|
||||||
extern void (* AXInitWithParams)(u32 * params);
|
|
||||||
extern void (* AXInit)(void);
|
|
||||||
extern void (* AXQuit)(void);
|
|
||||||
extern u32 (* AXGetInputSamplesPerSec)(void);
|
|
||||||
extern s32 (* AXVoiceBegin)(void *v);
|
|
||||||
extern s32 (* AXVoiceEnd)(void *v);
|
|
||||||
extern void (* AXSetVoiceType)(void *v, u16 type);
|
|
||||||
extern void (* AXSetVoiceOffsets)(void *v, const void *buf);
|
|
||||||
extern void (* AXSetVoiceSrcType)(void *v, u32 type);
|
|
||||||
extern void (* AXSetVoiceVe)(void *v, const void *vol);
|
|
||||||
extern s32 (* AXSetVoiceDeviceMix)(void *v, s32 device, u32 id, void *mix);
|
|
||||||
extern void (* AXSetVoiceState)(void *v, u16 state);
|
|
||||||
extern void (* AXSetVoiceSrc)(void *v, const void *src);
|
|
||||||
extern s32 (* AXSetVoiceSrcRatio)(void *v, f32 ratio);
|
|
||||||
extern void * (* AXAcquireVoice)(u32 prio, void * callback, u32 arg);
|
|
||||||
extern void (* AXFreeVoice)(void *v);
|
|
||||||
extern void (* AXRegisterFrameCallback)(void * callback);
|
|
||||||
extern u32 (* AXGetVoiceLoopCount)(void * v);
|
|
||||||
extern void (* AXSetVoiceEndOffset)(void * v, u32 offset);
|
|
||||||
extern void (* AXSetVoiceLoopOffset)(void * v, u32 offset);
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif // __VPAD_FUNCTIONS_H_
|
|
@ -1,54 +0,0 @@
|
|||||||
/****************************************************************************
|
|
||||||
* Copyright (C) 2015
|
|
||||||
* by Dimok
|
|
||||||
*
|
|
||||||
* This software is provided 'as-is', without any express or implied
|
|
||||||
* warranty. In no event will the authors be held liable for any
|
|
||||||
* damages arising from the use of this software.
|
|
||||||
*
|
|
||||||
* Permission is granted to anyone to use this software for any
|
|
||||||
* purpose, including commercial applications, and to alter it and
|
|
||||||
* redistribute it freely, subject to the following restrictions:
|
|
||||||
*
|
|
||||||
* 1. The origin of this software must not be misrepresented; you
|
|
||||||
* must not claim that you wrote the original software. If you use
|
|
||||||
* this software in a product, an acknowledgment in the product
|
|
||||||
* documentation would be appreciated but is not required.
|
|
||||||
*
|
|
||||||
* 2. Altered source versions must be plainly marked as such, and
|
|
||||||
* must not be misrepresented as being the original software.
|
|
||||||
*
|
|
||||||
* 3. This notice may not be removed or altered from any source
|
|
||||||
* distribution.
|
|
||||||
***************************************************************************/
|
|
||||||
#include "os_functions.h"
|
|
||||||
#include "curl_functions.h"
|
|
||||||
|
|
||||||
unsigned int libcurl_handle __attribute__((section(".data"))) = 0;
|
|
||||||
|
|
||||||
EXPORT_DECL(CURLcode, n_curl_global_init, long flags);
|
|
||||||
EXPORT_DECL(CURL *, n_curl_easy_init, void);
|
|
||||||
EXPORT_DECL(CURLcode, n_curl_easy_setopt, CURL *curl, CURLoption option, ...);
|
|
||||||
EXPORT_DECL(CURLcode, n_curl_easy_perform, CURL *curl);
|
|
||||||
EXPORT_DECL(void, n_curl_easy_cleanup, CURL *curl);
|
|
||||||
EXPORT_DECL(CURLcode, n_curl_easy_getinfo, CURL *curl, CURLINFO info, ...);
|
|
||||||
|
|
||||||
void InitAcquireCurl(void)
|
|
||||||
{
|
|
||||||
OSDynLoad_Acquire("nlibcurl", &libcurl_handle);
|
|
||||||
}
|
|
||||||
|
|
||||||
void InitCurlFunctionPointers(void)
|
|
||||||
{
|
|
||||||
InitAcquireCurl();
|
|
||||||
unsigned int *funcPointer = 0;
|
|
||||||
|
|
||||||
OS_FIND_EXPORT_EX(libcurl_handle, curl_global_init, n_curl_global_init);
|
|
||||||
OS_FIND_EXPORT_EX(libcurl_handle, curl_easy_init, n_curl_easy_init);
|
|
||||||
OS_FIND_EXPORT_EX(libcurl_handle, curl_easy_setopt, n_curl_easy_setopt);
|
|
||||||
OS_FIND_EXPORT_EX(libcurl_handle, curl_easy_perform, n_curl_easy_perform);
|
|
||||||
OS_FIND_EXPORT_EX(libcurl_handle, curl_easy_cleanup, n_curl_easy_cleanup);
|
|
||||||
OS_FIND_EXPORT_EX(libcurl_handle, curl_easy_getinfo, n_curl_easy_getinfo);
|
|
||||||
|
|
||||||
n_curl_global_init(CURL_GLOBAL_ALL);
|
|
||||||
}
|
|
@ -1,51 +0,0 @@
|
|||||||
/****************************************************************************
|
|
||||||
* Copyright (C) 2015
|
|
||||||
* by Dimok
|
|
||||||
*
|
|
||||||
* This software is provided 'as-is', without any express or implied
|
|
||||||
* warranty. In no event will the authors be held liable for any
|
|
||||||
* damages arising from the use of this software.
|
|
||||||
*
|
|
||||||
* Permission is granted to anyone to use this software for any
|
|
||||||
* purpose, including commercial applications, and to alter it and
|
|
||||||
* redistribute it freely, subject to the following restrictions:
|
|
||||||
*
|
|
||||||
* 1. The origin of this software must not be misrepresented; you
|
|
||||||
* must not claim that you wrote the original software. If you use
|
|
||||||
* this software in a product, an acknowledgment in the product
|
|
||||||
* documentation would be appreciated but is not required.
|
|
||||||
*
|
|
||||||
* 2. Altered source versions must be plainly marked as such, and
|
|
||||||
* must not be misrepresented as being the original software.
|
|
||||||
*
|
|
||||||
* 3. This notice may not be removed or altered from any source
|
|
||||||
* distribution.
|
|
||||||
***************************************************************************/
|
|
||||||
#ifndef __CURL_FUNCTIONS_H_
|
|
||||||
#define __CURL_FUNCTIONS_H_
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
extern "C" {
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include <gctypes.h>
|
|
||||||
#include "socket_functions.h"
|
|
||||||
typedef int socklen_t;
|
|
||||||
#include <curl/curl.h>
|
|
||||||
#include <curl/easy.h>
|
|
||||||
|
|
||||||
void InitCurlFunctionPointers(void);
|
|
||||||
void InitAcquireCurl(void);
|
|
||||||
|
|
||||||
extern CURLcode (* n_curl_global_init)(long flags);
|
|
||||||
extern CURL * (* n_curl_easy_init)(void);
|
|
||||||
extern CURLcode (* n_curl_easy_setopt)(CURL *curl, CURLoption option, ...);
|
|
||||||
extern CURLcode (* n_curl_easy_perform)(CURL *curl);
|
|
||||||
extern void (* n_curl_easy_cleanup)(CURL *curl);
|
|
||||||
extern CURLcode (* n_curl_easy_getinfo)(CURL *curl, CURLINFO info, ...);
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif // __CURL_FUNCTIONS_H_
|
|
26
src/dynamic_libs/exports.h
Normal file
26
src/dynamic_libs/exports.h
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
#ifndef __EXPORTS_H_
|
||||||
|
#define __EXPORTS_H_
|
||||||
|
|
||||||
|
#include <coreinit/dynload.h>
|
||||||
|
#include <coreinit/debug.h>
|
||||||
|
|
||||||
|
#define EXPORT_DECL(res, func, ...) res (* func)(__VA_ARGS__) __attribute__((section(".data"))) = 0;
|
||||||
|
#define EXPORT_VAR(type, var) type var __attribute__((section(".data")));
|
||||||
|
|
||||||
|
|
||||||
|
#define EXPORT_FUNC_WRITE(func, val) *(u32*)(((u32)&func) + 0) = (u32)val
|
||||||
|
|
||||||
|
#define OS_FIND_EXPORT(handle, func) funcPointer = 0; \
|
||||||
|
OSDynLoad_FindExport(handle, 0, # func, (void**) &funcPointer); \
|
||||||
|
if(!funcPointer) \
|
||||||
|
OSFatal("Function " # func " is NULL"); \
|
||||||
|
EXPORT_FUNC_WRITE(func, funcPointer);
|
||||||
|
|
||||||
|
#define OS_FIND_EXPORT_EX(handle, func, func_p) \
|
||||||
|
funcPointer = 0; \
|
||||||
|
OSDynLoad_FindExport(handle, 0, # func, (void**) &funcPointer); \
|
||||||
|
if(!funcPointer) \
|
||||||
|
OSFatal("Function " # func " is NULL"); \
|
||||||
|
EXPORT_FUNC_WRITE(func_p, funcPointer);
|
||||||
|
|
||||||
|
#endif
|
@ -1,61 +0,0 @@
|
|||||||
#ifndef FS_DEFS_H
|
|
||||||
#define FS_DEFS_H
|
|
||||||
|
|
||||||
#include <gctypes.h>
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
extern "C" {
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
/* FS defines and types */
|
|
||||||
#define FS_MAX_LOCALPATH_SIZE 511
|
|
||||||
#define FS_MAX_MOUNTPATH_SIZE 128
|
|
||||||
#define FS_MAX_FULLPATH_SIZE (FS_MAX_LOCALPATH_SIZE + FS_MAX_MOUNTPATH_SIZE)
|
|
||||||
#define FS_MAX_ARGPATH_SIZE FS_MAX_FULLPATH_SIZE
|
|
||||||
|
|
||||||
#define FS_STATUS_OK 0
|
|
||||||
#define FS_RET_UNSUPPORTED_CMD 0x0400
|
|
||||||
#define FS_RET_NO_ERROR 0x0000
|
|
||||||
#define FS_RET_ALL_ERROR (unsigned int)(-1)
|
|
||||||
|
|
||||||
#define FS_STAT_FLAG_IS_DIRECTORY 0x80000000
|
|
||||||
|
|
||||||
/* max length of file/dir name */
|
|
||||||
#define FS_MAX_ENTNAME_SIZE 256
|
|
||||||
|
|
||||||
#define FS_SOURCETYPE_EXTERNAL 0
|
|
||||||
#define FS_SOURCETYPE_HFIO 1
|
|
||||||
|
|
||||||
#define FS_MOUNT_SOURCE_SIZE 0x300
|
|
||||||
#define FS_CLIENT_SIZE 0x1700
|
|
||||||
#define FS_CMD_BLOCK_SIZE 0xA80
|
|
||||||
|
|
||||||
typedef struct
|
|
||||||
{
|
|
||||||
uint32_t flag;
|
|
||||||
uint32_t permission;
|
|
||||||
uint32_t owner_id;
|
|
||||||
uint32_t group_id;
|
|
||||||
uint32_t size;
|
|
||||||
uint32_t alloc_size;
|
|
||||||
uint64_t quota_size;
|
|
||||||
uint32_t ent_id;
|
|
||||||
uint64_t ctime;
|
|
||||||
uint64_t mtime;
|
|
||||||
uint8_t attributes[48];
|
|
||||||
} __attribute__((packed)) FSStat;
|
|
||||||
|
|
||||||
typedef struct
|
|
||||||
{
|
|
||||||
FSStat stat;
|
|
||||||
char name[FS_MAX_ENTNAME_SIZE];
|
|
||||||
} FSDirEntry;
|
|
||||||
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif /* FS_DEFS_H */
|
|
||||||
|
|
@ -1,131 +0,0 @@
|
|||||||
/****************************************************************************
|
|
||||||
* Copyright (C) 2015
|
|
||||||
* by Dimok
|
|
||||||
*
|
|
||||||
* This software is provided 'as-is', without any express or implied
|
|
||||||
* warranty. In no event will the authors be held liable for any
|
|
||||||
* damages arising from the use of this software.
|
|
||||||
*
|
|
||||||
* Permission is granted to anyone to use this software for any
|
|
||||||
* purpose, including commercial applications, and to alter it and
|
|
||||||
* redistribute it freely, subject to the following restrictions:
|
|
||||||
*
|
|
||||||
* 1. The origin of this software must not be misrepresented; you
|
|
||||||
* must not claim that you wrote the original software. If you use
|
|
||||||
* this software in a product, an acknowledgment in the product
|
|
||||||
* documentation would be appreciated but is not required.
|
|
||||||
*
|
|
||||||
* 2. Altered source versions must be plainly marked as such, and
|
|
||||||
* must not be misrepresented as being the original software.
|
|
||||||
*
|
|
||||||
* 3. This notice may not be removed or altered from any source
|
|
||||||
* distribution.
|
|
||||||
***************************************************************************/
|
|
||||||
#include "fs_functions.h"
|
|
||||||
#include "os_functions.h"
|
|
||||||
|
|
||||||
EXPORT_DECL(int, FSInit, void);
|
|
||||||
EXPORT_DECL(int, FSShutdown, void);
|
|
||||||
EXPORT_DECL(int, FSAddClientEx, void *pClient, int unk_zero_param, int errHandling);
|
|
||||||
EXPORT_DECL(int, FSDelClient, void *pClient);
|
|
||||||
EXPORT_DECL(void, FSInitCmdBlock, void *pCmd);
|
|
||||||
EXPORT_DECL(int, FSGetMountSource, void *pClient, void *pCmd, int type, void *source, int errHandling);
|
|
||||||
|
|
||||||
EXPORT_DECL(int, FSMount, void *pClient, void *pCmd, void *source, char *target, uint32_t bytes, int errHandling);
|
|
||||||
EXPORT_DECL(int, FSUnmount, void *pClient, void *pCmd, const char *target, int errHandling);
|
|
||||||
|
|
||||||
EXPORT_DECL(int, FSGetStat, void *pClient, void *pCmd, const char *path, FSStat *stats, int errHandling);
|
|
||||||
EXPORT_DECL(int, FSGetStatAsync, void *pClient, void *pCmd, const char *path, void *stats, int error, void *asyncParams);
|
|
||||||
EXPORT_DECL(int, FSRename, void *pClient, void *pCmd, const char *oldPath, const char *newPath, int error);
|
|
||||||
EXPORT_DECL(int, FSRenameAsync, void *pClient, void *pCmd, const char *oldPath, const char *newPath, int error, void *asyncParams);
|
|
||||||
EXPORT_DECL(int, FSRemove, void *pClient, void *pCmd, const char *path, int error);
|
|
||||||
EXPORT_DECL(int, FSRemoveAsync, void *pClient, void *pCmd, const char *path, int error, void *asyncParams);
|
|
||||||
EXPORT_DECL(int, FSFlushQuota, void *pClient, void *pCmd, const char* path, int error);
|
|
||||||
EXPORT_DECL(int, FSFlushQuotaAsync, void *pClient, void *pCmd, const char *path, int error, void *asyncParams);
|
|
||||||
EXPORT_DECL(int, FSGetFreeSpaceSize, void *pClient, void *pCmd, const char *path, uint64_t *returnedFreeSize, int error);
|
|
||||||
EXPORT_DECL(int, FSGetFreeSpaceSizeAsync, void *pClient, void *pCmd, const char *path, uint64_t *returnedFreeSize, int error, void *asyncParams);
|
|
||||||
EXPORT_DECL(int, FSRollbackQuota, void *pClient, void *pCmd, const char *path, int error);
|
|
||||||
EXPORT_DECL(int, FSRollbackQuotaAsync, void *pClient, void *pCmd, const char *path, int error, void *asyncParams);
|
|
||||||
|
|
||||||
EXPORT_DECL(int, FSOpenDir, void *pClient, void *pCmd, const char *path, int *dh, int errHandling);
|
|
||||||
EXPORT_DECL(int, FSOpenDirAsync, void *pClient, void* pCmd, const char *path, int *handle, int error, void *asyncParams);
|
|
||||||
EXPORT_DECL(int, FSReadDir, void *pClient, void *pCmd, int dh, FSDirEntry *dir_entry, int errHandling);
|
|
||||||
EXPORT_DECL(int, FSRewindDir, void *pClient, void *pCmd, int dh, int errHandling);
|
|
||||||
EXPORT_DECL(int, FSCloseDir, void *pClient, void *pCmd, int dh, int errHandling);
|
|
||||||
EXPORT_DECL(int, FSChangeDir, void *pClient, void *pCmd, const char *path, int errHandling);
|
|
||||||
EXPORT_DECL(int, FSChangeDirAsync, void *pClient, void *pCmd, const char *path, int error, void *asyncParams);
|
|
||||||
EXPORT_DECL(int, FSMakeDir, void *pClient, void *pCmd, const char *path, int errHandling);
|
|
||||||
EXPORT_DECL(int, FSMakeDirAsync, void *pClient, void *pCmd, const char *path, int error, void *asyncParams);
|
|
||||||
|
|
||||||
EXPORT_DECL(int, FSOpenFile, void *pClient, void *pCmd, const char *path, const char *mode, int *fd, int errHandling);
|
|
||||||
EXPORT_DECL(int, FSOpenFileAsync, void *pClient, void *pCmd, const char *path, const char *mode, int *handle, int error, const void *asyncParams);
|
|
||||||
EXPORT_DECL(int, FSReadFile, void *pClient, void *pCmd, void *buffer, int size, int count, int fd, int flag, int errHandling);
|
|
||||||
EXPORT_DECL(int, FSCloseFile, void *pClient, void *pCmd, int fd, int errHandling);
|
|
||||||
|
|
||||||
EXPORT_DECL(int, FSFlushFile, void *pClient, void *pCmd, int fd, int error);
|
|
||||||
EXPORT_DECL(int, FSTruncateFile, void *pClient, void *pCmd, int fd, int error);
|
|
||||||
EXPORT_DECL(int, FSGetStatFile, void *pClient, void *pCmd, int fd, void *buffer, int error);
|
|
||||||
EXPORT_DECL(int, FSSetPosFile, void *pClient, void *pCmd, int fd, int pos, int error);
|
|
||||||
EXPORT_DECL(int, FSWriteFile, void *pClient, void *pCmd, const void *source, int block_size, int block_count, int fd, int flag, int error);
|
|
||||||
|
|
||||||
EXPORT_DECL(int, FSBindMount, void *pClient, void *pCmd, char *source, char *target, int error);
|
|
||||||
EXPORT_DECL(int, FSBindUnmount, void *pClient, void *pCmd, char *target, int error);
|
|
||||||
|
|
||||||
EXPORT_DECL(int, FSMakeQuota, void *pClient, void *pCmd, const char *path,u32 mode, u64 size, int errHandling);
|
|
||||||
EXPORT_DECL(int, FSMakeQuotaAsync ,void *pClient, void *pCmd, const char *path,u32 mode, u64 size, int errHandling,const void *asyncParams);
|
|
||||||
|
|
||||||
void InitFSFunctionPointers(void)
|
|
||||||
{
|
|
||||||
unsigned int *funcPointer = 0;
|
|
||||||
|
|
||||||
OS_FIND_EXPORT(coreinit_handle, FSInit);
|
|
||||||
OS_FIND_EXPORT(coreinit_handle, FSShutdown);
|
|
||||||
OS_FIND_EXPORT(coreinit_handle, FSAddClientEx);
|
|
||||||
OS_FIND_EXPORT(coreinit_handle, FSDelClient);
|
|
||||||
OS_FIND_EXPORT(coreinit_handle, FSInitCmdBlock);
|
|
||||||
OS_FIND_EXPORT(coreinit_handle, FSGetMountSource);
|
|
||||||
|
|
||||||
OS_FIND_EXPORT(coreinit_handle, FSMount);
|
|
||||||
OS_FIND_EXPORT(coreinit_handle, FSUnmount);
|
|
||||||
|
|
||||||
OS_FIND_EXPORT(coreinit_handle, FSGetStat);
|
|
||||||
OS_FIND_EXPORT(coreinit_handle, FSGetStatAsync);
|
|
||||||
OS_FIND_EXPORT(coreinit_handle, FSRename);
|
|
||||||
OS_FIND_EXPORT(coreinit_handle, FSRenameAsync);
|
|
||||||
OS_FIND_EXPORT(coreinit_handle, FSRemove);
|
|
||||||
OS_FIND_EXPORT(coreinit_handle, FSRemoveAsync);
|
|
||||||
OS_FIND_EXPORT(coreinit_handle, FSFlushQuota);
|
|
||||||
OS_FIND_EXPORT(coreinit_handle, FSFlushQuotaAsync);
|
|
||||||
OS_FIND_EXPORT(coreinit_handle, FSGetFreeSpaceSize);
|
|
||||||
OS_FIND_EXPORT(coreinit_handle, FSGetFreeSpaceSizeAsync);
|
|
||||||
OS_FIND_EXPORT(coreinit_handle, FSRollbackQuota);
|
|
||||||
OS_FIND_EXPORT(coreinit_handle, FSRollbackQuotaAsync);
|
|
||||||
|
|
||||||
OS_FIND_EXPORT(coreinit_handle, FSOpenDir);
|
|
||||||
OS_FIND_EXPORT(coreinit_handle, FSOpenDirAsync);
|
|
||||||
OS_FIND_EXPORT(coreinit_handle, FSReadDir);
|
|
||||||
OS_FIND_EXPORT(coreinit_handle, FSRewindDir);
|
|
||||||
OS_FIND_EXPORT(coreinit_handle, FSCloseDir);
|
|
||||||
OS_FIND_EXPORT(coreinit_handle, FSChangeDir);
|
|
||||||
OS_FIND_EXPORT(coreinit_handle, FSChangeDirAsync);
|
|
||||||
OS_FIND_EXPORT(coreinit_handle, FSMakeDir);
|
|
||||||
OS_FIND_EXPORT(coreinit_handle, FSMakeDirAsync);
|
|
||||||
|
|
||||||
|
|
||||||
OS_FIND_EXPORT(coreinit_handle, FSOpenFile);
|
|
||||||
OS_FIND_EXPORT(coreinit_handle, FSOpenFileAsync);
|
|
||||||
OS_FIND_EXPORT(coreinit_handle, FSReadFile);
|
|
||||||
OS_FIND_EXPORT(coreinit_handle, FSCloseFile);
|
|
||||||
|
|
||||||
OS_FIND_EXPORT(coreinit_handle, FSFlushFile);
|
|
||||||
OS_FIND_EXPORT(coreinit_handle, FSTruncateFile);
|
|
||||||
OS_FIND_EXPORT(coreinit_handle, FSGetStatFile);
|
|
||||||
OS_FIND_EXPORT(coreinit_handle, FSSetPosFile);
|
|
||||||
OS_FIND_EXPORT(coreinit_handle, FSWriteFile);
|
|
||||||
|
|
||||||
OS_FIND_EXPORT(coreinit_handle, FSBindMount);
|
|
||||||
OS_FIND_EXPORT(coreinit_handle, FSBindUnmount);
|
|
||||||
|
|
||||||
OS_FIND_EXPORT(coreinit_handle, FSMakeQuota);
|
|
||||||
OS_FIND_EXPORT(coreinit_handle, FSMakeQuotaAsync);
|
|
||||||
}
|
|
@ -1,95 +0,0 @@
|
|||||||
/****************************************************************************
|
|
||||||
* Copyright (C) 2015
|
|
||||||
* by Dimok
|
|
||||||
*
|
|
||||||
* This software is provided 'as-is', without any express or implied
|
|
||||||
* warranty. In no event will the authors be held liable for any
|
|
||||||
* damages arising from the use of this software.
|
|
||||||
*
|
|
||||||
* Permission is granted to anyone to use this software for any
|
|
||||||
* purpose, including commercial applications, and to alter it and
|
|
||||||
* redistribute it freely, subject to the following restrictions:
|
|
||||||
*
|
|
||||||
* 1. The origin of this software must not be misrepresented; you
|
|
||||||
* must not claim that you wrote the original software. If you use
|
|
||||||
* this software in a product, an acknowledgment in the product
|
|
||||||
* documentation would be appreciated but is not required.
|
|
||||||
*
|
|
||||||
* 2. Altered source versions must be plainly marked as such, and
|
|
||||||
* must not be misrepresented as being the original software.
|
|
||||||
*
|
|
||||||
* 3. This notice may not be removed or altered from any source
|
|
||||||
* distribution.
|
|
||||||
***************************************************************************/
|
|
||||||
#ifndef __FS_FUNCTIONS_H_
|
|
||||||
#define __FS_FUNCTIONS_H_
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
extern "C" {
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include <gctypes.h>
|
|
||||||
#include "fs_defs.h"
|
|
||||||
|
|
||||||
void InitFSFunctionPointers(void);
|
|
||||||
|
|
||||||
extern int (* FSInit)(void);
|
|
||||||
extern int (* FSShutdown)(void);
|
|
||||||
extern int (* FSAddClientEx)(void *pClient, int unk_zero_param, int errHandling);
|
|
||||||
extern int (* FSDelClient)(void *pClient);
|
|
||||||
extern void (* FSInitCmdBlock)(void *pCmd);
|
|
||||||
extern int (* FSGetMountSource)(void *pClient, void *pCmd, int type, void *source, int errHandling);
|
|
||||||
|
|
||||||
extern int (* FSMount)(void *pClient, void *pCmd, void *source, char *target, uint32_t bytes, int errHandling);
|
|
||||||
extern int (* FSUnmount)(void *pClient, void *pCmd, const char *target, int errHandling);
|
|
||||||
extern int (* FSRename)(void *pClient, void *pCmd, const char *oldPath, const char *newPath, int error);
|
|
||||||
extern int (* FSRenameAsync)(void *pClient, void *pCmd, const char *oldPath, const char *newPath, int error, void *asyncParams);
|
|
||||||
extern int (* FSRemove)(void *pClient, void *pCmd, const char *path, int error);
|
|
||||||
extern int (* FSRemoveAsync)(void *pClient, void *pCmd, const char *path, int error, void *asyncParams);
|
|
||||||
|
|
||||||
extern int (* FSGetStat)(void *pClient, void *pCmd, const char *path, FSStat *stats, int errHandling);
|
|
||||||
extern int (* FSGetStatAsync)(void *pClient, void *pCmd, const char *path, void *stats, int error, void *asyncParams);
|
|
||||||
extern int (* FSRename)(void *pClient, void *pCmd, const char *oldPath, const char *newPath, int error);
|
|
||||||
extern int (* FSRenameAsync)(void *pClient, void *pCmd, const char *oldPath, const char *newPath, int error, void *asyncParams);
|
|
||||||
extern int (* FSRemove)(void *pClient, void *pCmd, const char *path, int error);
|
|
||||||
extern int (* FSRemoveAsync)(void *pClient, void *pCmd, const char *path, int error, void *asyncParams);
|
|
||||||
extern int (* FSFlushQuota)(void *pClient, void *pCmd, const char* path, int error);
|
|
||||||
extern int (* FSFlushQuotaAsync)(void *pClient, void *pCmd, const char *path, int error, void *asyncParams);
|
|
||||||
extern int (* FSGetFreeSpaceSize)(void *pClient, void *pCmd, const char *path, uint64_t *returnedFreeSize, int error);
|
|
||||||
extern int (* FSGetFreeSpaceSizeAsync)(void *pClient, void *pCmd, const char *path, uint64_t *returnedFreeSize, int error, void *asyncParams);
|
|
||||||
extern int (* FSRollbackQuota)(void *pClient, void *pCmd, const char *path, int error);
|
|
||||||
extern int (* FSRollbackQuotaAsync)(void *pClient, void *pCmd, const char *path, int error, void *asyncParams);
|
|
||||||
|
|
||||||
extern int (* FSOpenDir)(void *pClient, void *pCmd, const char *path, int *dh, int errHandling);
|
|
||||||
extern int (* FSOpenDirAsync)(void *pClient, void* pCmd, const char *path, int *handle, int error, void *asyncParams);
|
|
||||||
extern int (* FSReadDir)(void *pClient, void *pCmd, int dh, FSDirEntry *dir_entry, int errHandling);
|
|
||||||
extern int (* FSRewindDir)(void *pClient, void *pCmd, int dh, int errHandling);
|
|
||||||
extern int (* FSCloseDir)(void *pClient, void *pCmd, int dh, int errHandling);
|
|
||||||
extern int (* FSChangeDir)(void *pClient, void *pCmd, const char *path, int errHandling);
|
|
||||||
extern int (* FSChangeDirAsync)(void *pClient, void *pCmd, const char *path, int error, void *asyncParams);
|
|
||||||
extern int (* FSMakeDir)(void *pClient, void *pCmd, const char *path, int errHandling);
|
|
||||||
extern int (* FSMakeDirAsync)(void *pClient, void *pCmd, const char *path, int error, void *asyncParams);
|
|
||||||
|
|
||||||
extern int (* FSOpenFile)(void *pClient, void *pCmd, const char *path, const char *mode, int *fd, int errHandling);
|
|
||||||
extern int (* FSOpenFileAsync)(void *pClient, void *pCmd, const char *path, const char *mode, int *handle, int error, const void *asyncParams);
|
|
||||||
extern int (* FSReadFile)(void *pClient, void *pCmd, void *buffer, int size, int count, int fd, int flag, int errHandling);
|
|
||||||
extern int (* FSCloseFile)(void *pClient, void *pCmd, int fd, int errHandling);
|
|
||||||
|
|
||||||
extern int (* FSFlushFile)(void *pClient, void *pCmd, int fd, int error);
|
|
||||||
extern int (* FSTruncateFile)(void *pClient, void *pCmd, int fd, int error);
|
|
||||||
extern int (* FSGetStatFile)(void *pClient, void *pCmd, int fd, void *buffer, int error);
|
|
||||||
extern int (* FSSetPosFile)(void *pClient, void *pCmd, int fd, int pos, int error);
|
|
||||||
extern int (* FSWriteFile)(void *pClient, void *pCmd, const void *source, int block_size, int block_count, int fd, int flag, int error);
|
|
||||||
|
|
||||||
extern int (* FSBindMount)(void *pClient, void *pCmd, char *source, char *target, int error);
|
|
||||||
extern int (* FSBindUnmount)(void *pClient, void *pCmd, char *target, int error);
|
|
||||||
|
|
||||||
extern int (* FSMakeQuota)( void *pClient, void *pCmd, const char *path,u32 mode, u64 size, int errHandling);
|
|
||||||
extern int (* FSMakeQuotaAsync)(void *pClient, void *pCmd, const char *path,u32 mode, u64 size, int errHandling,const void *asyncParams);
|
|
||||||
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif // __FS_FUNCTIONS_H_
|
|
@ -1,173 +0,0 @@
|
|||||||
/****************************************************************************
|
|
||||||
* Copyright (C) 2015
|
|
||||||
* by Dimok
|
|
||||||
*
|
|
||||||
* This software is provided 'as-is', without any express or implied
|
|
||||||
* warranty. In no event will the authors be held liable for any
|
|
||||||
* damages arising from the use of this software.
|
|
||||||
*
|
|
||||||
* Permission is granted to anyone to use this software for any
|
|
||||||
* purpose, including commercial applications, and to alter it and
|
|
||||||
* redistribute it freely, subject to the following restrictions:
|
|
||||||
*
|
|
||||||
* 1. The origin of this software must not be misrepresented; you
|
|
||||||
* must not claim that you wrote the original software. If you use
|
|
||||||
* this software in a product, an acknowledgment in the product
|
|
||||||
* documentation would be appreciated but is not required.
|
|
||||||
*
|
|
||||||
* 2. Altered source versions must be plainly marked as such, and
|
|
||||||
* must not be misrepresented as being the original software.
|
|
||||||
*
|
|
||||||
* 3. This notice may not be removed or altered from any source
|
|
||||||
* distribution.
|
|
||||||
***************************************************************************/
|
|
||||||
#include "os_functions.h"
|
|
||||||
#include "gx2_types.h"
|
|
||||||
|
|
||||||
unsigned int gx2_handle __attribute__((section(".data"))) = 0;
|
|
||||||
|
|
||||||
EXPORT_DECL(void, GX2Init, u32 * init_attribs);
|
|
||||||
EXPORT_DECL(void, GX2Shutdown, void);
|
|
||||||
EXPORT_DECL(void, GX2Flush, void);
|
|
||||||
EXPORT_DECL(s32, GX2GetMainCoreId, void) ;
|
|
||||||
EXPORT_DECL(s32, GX2DrawDone, void);
|
|
||||||
EXPORT_DECL(void, GX2ClearColor, GX2ColorBuffer *colorBuffer, f32 r, f32 g, f32 b, f32 a);
|
|
||||||
EXPORT_DECL(void, GX2SetViewport, f32 x, f32 y, f32 w, f32 h, f32 nearZ, f32 farZ);
|
|
||||||
EXPORT_DECL(void, GX2SetScissor, u32 x_orig, u32 y_orig, u32 wd, u32 ht);
|
|
||||||
EXPORT_DECL(void, GX2SetContextState, const GX2ContextState* state);
|
|
||||||
EXPORT_DECL(void, GX2DrawEx, s32 primitive_type, u32 count, u32 first_vertex, u32 instances_count);
|
|
||||||
EXPORT_DECL(void, GX2DrawIndexedEx, s32 primitive_type, u32 count, s32 index_format, const void* idx, u32 first_vertex, u32 instances_count);
|
|
||||||
EXPORT_DECL(void, GX2ClearDepthStencilEx, GX2DepthBuffer *depthBuffer, f32 depth_value, u8 stencil_value, s32 clear_mode);
|
|
||||||
EXPORT_DECL(void, GX2SetClearDepthStencil, GX2DepthBuffer *depthBuffer, f32 depth_value, u8 stencil_value);
|
|
||||||
EXPORT_DECL(void, GX2CopyColorBufferToScanBuffer, const GX2ColorBuffer *colorBuffer, s32 scan_target);
|
|
||||||
EXPORT_DECL(void, GX2SwapScanBuffers, void);
|
|
||||||
EXPORT_DECL(void, GX2SetTVEnable, s32 enable);
|
|
||||||
EXPORT_DECL(void, GX2SetSwapInterval, u32 swap_interval);
|
|
||||||
EXPORT_DECL(u32, GX2GetSwapInterval, void);
|
|
||||||
EXPORT_DECL(void, GX2WaitForVsync, void);
|
|
||||||
EXPORT_DECL(void, GX2CalcTVSize, s32 tv_render_mode, s32 format, s32 buffering_mode, u32 * size, s32 * scale_needed);
|
|
||||||
EXPORT_DECL(void, GX2Invalidate, s32 invalidate_type, void * ptr, u32 buffer_size);
|
|
||||||
EXPORT_DECL(void, GX2SetTVBuffer, void *buffer, u32 buffer_size, s32 tv_render_mode, s32 format, s32 buffering_mode);
|
|
||||||
EXPORT_DECL(void, GX2CalcSurfaceSizeAndAlignment, GX2Surface *surface);
|
|
||||||
EXPORT_DECL(void, GX2InitDepthBufferRegs, GX2DepthBuffer *depthBuffer);
|
|
||||||
EXPORT_DECL(void, GX2InitColorBufferRegs, GX2ColorBuffer *colorBuffer);
|
|
||||||
EXPORT_DECL(void, GX2CalcColorBufferAuxInfo, GX2ColorBuffer *colorBuffer, u32 *size, u32 *align);
|
|
||||||
EXPORT_DECL(void, GX2CalcDepthBufferHiZInfo, GX2DepthBuffer *depthBuffer, u32 *size, u32 *align);
|
|
||||||
EXPORT_DECL(void, GX2InitDepthBufferHiZEnable, GX2DepthBuffer *depthBuffer, s32 hiZ_enable);
|
|
||||||
EXPORT_DECL(void, GX2SetupContextStateEx, GX2ContextState* state, s32 enable_profiling);
|
|
||||||
EXPORT_DECL(void, GX2SetColorBuffer, const GX2ColorBuffer *colorBuffer, s32 target);
|
|
||||||
EXPORT_DECL(void, GX2SetDepthBuffer, const GX2DepthBuffer *depthBuffer);
|
|
||||||
EXPORT_DECL(void, GX2SetAttribBuffer, u32 attr_index, u32 attr_size, u32 stride, const void* attr);
|
|
||||||
EXPORT_DECL(void, GX2InitTextureRegs, GX2Texture *texture);
|
|
||||||
EXPORT_DECL(void, GX2InitSampler, GX2Sampler *sampler, s32 tex_clamp, s32 min_mag_filter);
|
|
||||||
EXPORT_DECL(u32, GX2CalcFetchShaderSizeEx, u32 num_attrib, s32 fetch_shader_type, s32 tessellation_mode);
|
|
||||||
EXPORT_DECL(void, GX2InitFetchShaderEx, GX2FetchShader* fs, void* fs_buffer, u32 count, const GX2AttribStream* attribs, s32 fetch_shader_type, s32 tessellation_mode);
|
|
||||||
EXPORT_DECL(void, GX2SetFetchShader, const GX2FetchShader* fs);
|
|
||||||
EXPORT_DECL(void, GX2SetVertexUniformReg, u32 offset, u32 count, const void *values);
|
|
||||||
EXPORT_DECL(void, GX2SetPixelUniformReg, u32 offset, u32 count, const void *values);
|
|
||||||
EXPORT_DECL(void, GX2SetPixelTexture, const GX2Texture *texture, u32 texture_hw_location);
|
|
||||||
EXPORT_DECL(void, GX2SetVertexTexture, const GX2Texture *texture, u32 texture_hw_location);
|
|
||||||
EXPORT_DECL(void, GX2SetPixelSampler, const GX2Sampler *sampler, u32 sampler_hw_location);
|
|
||||||
EXPORT_DECL(void, GX2SetVertexSampler, const GX2Sampler *sampler, u32 sampler_hw_location);
|
|
||||||
EXPORT_DECL(void, GX2SetPixelShader, const GX2PixelShader* pixelShader);
|
|
||||||
EXPORT_DECL(void, GX2SetVertexShader, const GX2VertexShader* vertexShader);
|
|
||||||
EXPORT_DECL(void, GX2InitSamplerZMFilter, GX2Sampler *sampler, s32 z_filter, s32 mip_filter);
|
|
||||||
EXPORT_DECL(void, GX2SetColorControl, s32 lop, u8 blend_enable_mask, s32 enable_multi_write, s32 enable_color_buffer);
|
|
||||||
EXPORT_DECL(void, GX2SetDepthOnlyControl, s32 enable_depth, s32 enable_depth_write, s32 depth_comp_function);
|
|
||||||
EXPORT_DECL(void, GX2SetBlendControl, s32 target, s32 color_src_blend, s32 color_dst_blend, s32 color_combine, s32 separate_alpha_blend, s32 alpha_src_blend, s32 alpha_dst_blend, s32 alpha_combine);
|
|
||||||
EXPORT_DECL(void, GX2CalcDRCSize, s32 drc_mode, s32 format, s32 buffering_mode, u32 *size, s32 *scale_needed);
|
|
||||||
EXPORT_DECL(void, GX2SetDRCBuffer, void *buffer, u32 buffer_size, s32 drc_mode, s32 surface_format, s32 buffering_mode);
|
|
||||||
EXPORT_DECL(void, GX2SetDRCScale, u32 width, u32 height);
|
|
||||||
EXPORT_DECL(void, GX2SetDRCEnable, s32 enable);
|
|
||||||
EXPORT_DECL(void, GX2SetPolygonControl, s32 front_face_mode, s32 cull_front, s32 cull_back, s32 enable_mode, s32 mode_font, s32 mode_back, s32 poly_offset_front, s32 poly_offset_back, s32 point_line_offset);
|
|
||||||
EXPORT_DECL(void, GX2SetCullOnlyControl, s32 front_face_mode, s32 cull_front, s32 cull_back);
|
|
||||||
EXPORT_DECL(void, GX2SetDepthStencilControl, s32 enable_depth_test, s32 enable_depth_write, s32 depth_comp_function, s32 stencil_test_enable, s32 back_stencil_enable,
|
|
||||||
s32 font_stencil_func, s32 front_stencil_z_pass, s32 front_stencil_z_fail, s32 front_stencil_fail,
|
|
||||||
s32 back_stencil_func, s32 back_stencil_z_pass, s32 back_stencil_z_fail, s32 back_stencil_fail);
|
|
||||||
EXPORT_DECL(void, GX2SetStencilMask, u8 mask_front, u8 write_mask_front, u8 ref_front, u8 mask_back, u8 write_mask_back, u8 ref_back);
|
|
||||||
EXPORT_DECL(void, GX2SetLineWidth, f32 width);
|
|
||||||
EXPORT_DECL(void, GX2SetTVGamma, f32 val);
|
|
||||||
EXPORT_DECL(void, GX2SetDRCGamma, f32 gam);
|
|
||||||
EXPORT_DECL(s32, GX2GetSystemTVScanMode, void);
|
|
||||||
EXPORT_DECL(s32, GX2GetSystemDRCScanMode, void);
|
|
||||||
EXPORT_DECL(void, GX2RSetAllocator, void * (* allocFunc)(u32, u32, u32), void (* freeFunc)(u32, void*));
|
|
||||||
EXPORT_DECL(void, GX2CopySurface, GX2Surface * srcSurface,u32 srcMip,u32 srcSlice,GX2Surface * dstSurface,u32 dstMip,u32 dstSlice );
|
|
||||||
|
|
||||||
EXPORT_DECL(void, GX2ClearBuffersEx, GX2ColorBuffer * colorBuffer,GX2DepthBuffer * depthBuffer,f32 r, f32 g, f32 b, f32 a,f32 depthValue,u8 stencilValue,int clearFlags);
|
|
||||||
|
|
||||||
void InitAcquireGX2(void)
|
|
||||||
{
|
|
||||||
OSDynLoad_Acquire("gx2.rpl", &gx2_handle);
|
|
||||||
}
|
|
||||||
|
|
||||||
void InitGX2FunctionPointers(void)
|
|
||||||
{
|
|
||||||
unsigned int *funcPointer = 0;
|
|
||||||
InitAcquireGX2();
|
|
||||||
|
|
||||||
OS_FIND_EXPORT(gx2_handle, GX2Init);
|
|
||||||
OS_FIND_EXPORT(gx2_handle, GX2Shutdown);
|
|
||||||
OS_FIND_EXPORT(gx2_handle, GX2Flush);
|
|
||||||
OS_FIND_EXPORT(gx2_handle, GX2GetMainCoreId);
|
|
||||||
OS_FIND_EXPORT(gx2_handle, GX2DrawDone);
|
|
||||||
OS_FIND_EXPORT(gx2_handle, GX2ClearColor);
|
|
||||||
OS_FIND_EXPORT(gx2_handle, GX2SetViewport);
|
|
||||||
OS_FIND_EXPORT(gx2_handle, GX2SetScissor);
|
|
||||||
OS_FIND_EXPORT(gx2_handle, GX2SetContextState);
|
|
||||||
OS_FIND_EXPORT(gx2_handle, GX2DrawEx);
|
|
||||||
OS_FIND_EXPORT(gx2_handle, GX2DrawIndexedEx);
|
|
||||||
OS_FIND_EXPORT(gx2_handle, GX2ClearDepthStencilEx);
|
|
||||||
OS_FIND_EXPORT(gx2_handle, GX2CopyColorBufferToScanBuffer);
|
|
||||||
OS_FIND_EXPORT(gx2_handle, GX2SwapScanBuffers);
|
|
||||||
OS_FIND_EXPORT(gx2_handle, GX2SetTVEnable);
|
|
||||||
OS_FIND_EXPORT(gx2_handle, GX2SetSwapInterval);
|
|
||||||
OS_FIND_EXPORT(gx2_handle, GX2GetSwapInterval);
|
|
||||||
OS_FIND_EXPORT(gx2_handle, GX2WaitForVsync);
|
|
||||||
OS_FIND_EXPORT(gx2_handle, GX2CalcTVSize);
|
|
||||||
OS_FIND_EXPORT(gx2_handle, GX2Invalidate);
|
|
||||||
OS_FIND_EXPORT(gx2_handle, GX2SetTVBuffer);
|
|
||||||
OS_FIND_EXPORT(gx2_handle, GX2CalcSurfaceSizeAndAlignment);
|
|
||||||
OS_FIND_EXPORT(gx2_handle, GX2InitDepthBufferRegs);
|
|
||||||
OS_FIND_EXPORT(gx2_handle, GX2InitColorBufferRegs);
|
|
||||||
OS_FIND_EXPORT(gx2_handle, GX2CalcColorBufferAuxInfo);
|
|
||||||
OS_FIND_EXPORT(gx2_handle, GX2CalcDepthBufferHiZInfo);
|
|
||||||
OS_FIND_EXPORT(gx2_handle, GX2InitDepthBufferHiZEnable);
|
|
||||||
OS_FIND_EXPORT(gx2_handle, GX2SetupContextStateEx);
|
|
||||||
OS_FIND_EXPORT(gx2_handle, GX2SetColorBuffer);
|
|
||||||
OS_FIND_EXPORT(gx2_handle, GX2SetDepthBuffer);
|
|
||||||
OS_FIND_EXPORT(gx2_handle, GX2SetAttribBuffer);
|
|
||||||
OS_FIND_EXPORT(gx2_handle, GX2InitTextureRegs);
|
|
||||||
OS_FIND_EXPORT(gx2_handle, GX2InitSampler);
|
|
||||||
OS_FIND_EXPORT(gx2_handle, GX2CalcFetchShaderSizeEx);
|
|
||||||
OS_FIND_EXPORT(gx2_handle, GX2InitFetchShaderEx);
|
|
||||||
OS_FIND_EXPORT(gx2_handle, GX2SetFetchShader);
|
|
||||||
OS_FIND_EXPORT(gx2_handle, GX2SetVertexUniformReg);
|
|
||||||
OS_FIND_EXPORT(gx2_handle, GX2SetPixelUniformReg);
|
|
||||||
OS_FIND_EXPORT(gx2_handle, GX2SetPixelTexture);
|
|
||||||
OS_FIND_EXPORT(gx2_handle, GX2SetVertexTexture);
|
|
||||||
OS_FIND_EXPORT(gx2_handle, GX2SetPixelSampler);
|
|
||||||
OS_FIND_EXPORT(gx2_handle, GX2SetVertexSampler);
|
|
||||||
OS_FIND_EXPORT(gx2_handle, GX2SetPixelShader);
|
|
||||||
OS_FIND_EXPORT(gx2_handle, GX2SetVertexShader);
|
|
||||||
OS_FIND_EXPORT(gx2_handle, GX2InitSamplerZMFilter);
|
|
||||||
OS_FIND_EXPORT(gx2_handle, GX2SetColorControl);
|
|
||||||
OS_FIND_EXPORT(gx2_handle, GX2SetDepthOnlyControl);
|
|
||||||
OS_FIND_EXPORT(gx2_handle, GX2SetBlendControl);
|
|
||||||
OS_FIND_EXPORT(gx2_handle, GX2CalcDRCSize);
|
|
||||||
OS_FIND_EXPORT(gx2_handle, GX2SetDRCBuffer);
|
|
||||||
OS_FIND_EXPORT(gx2_handle, GX2SetDRCScale);
|
|
||||||
OS_FIND_EXPORT(gx2_handle, GX2SetDRCEnable);
|
|
||||||
OS_FIND_EXPORT(gx2_handle, GX2SetPolygonControl);
|
|
||||||
OS_FIND_EXPORT(gx2_handle, GX2SetCullOnlyControl);
|
|
||||||
OS_FIND_EXPORT(gx2_handle, GX2SetDepthStencilControl);
|
|
||||||
OS_FIND_EXPORT(gx2_handle, GX2SetStencilMask);
|
|
||||||
OS_FIND_EXPORT(gx2_handle, GX2SetLineWidth);
|
|
||||||
OS_FIND_EXPORT(gx2_handle, GX2SetDRCGamma);
|
|
||||||
OS_FIND_EXPORT(gx2_handle, GX2SetTVGamma);
|
|
||||||
OS_FIND_EXPORT(gx2_handle, GX2GetSystemTVScanMode);
|
|
||||||
OS_FIND_EXPORT(gx2_handle, GX2GetSystemDRCScanMode);
|
|
||||||
OS_FIND_EXPORT(gx2_handle, GX2RSetAllocator);
|
|
||||||
OS_FIND_EXPORT(gx2_handle, GX2CopySurface);
|
|
||||||
OS_FIND_EXPORT(gx2_handle, GX2ClearBuffersEx);
|
|
||||||
OS_FIND_EXPORT(gx2_handle, GX2SetClearDepthStencil);
|
|
||||||
}
|
|
@ -1,211 +0,0 @@
|
|||||||
/****************************************************************************
|
|
||||||
* Copyright (C) 2015
|
|
||||||
* by Dimok
|
|
||||||
*
|
|
||||||
* This software is provided 'as-is', without any express or implied
|
|
||||||
* warranty. In no event will the authors be held liable for any
|
|
||||||
* damages arising from the use of this software.
|
|
||||||
*
|
|
||||||
* Permission is granted to anyone to use this software for any
|
|
||||||
* purpose, including commercial applications, and to alter it and
|
|
||||||
* redistribute it freely, subject to the following restrictions:
|
|
||||||
*
|
|
||||||
* 1. The origin of this software must not be misrepresented; you
|
|
||||||
* must not claim that you wrote the original software. If you use
|
|
||||||
* this software in a product, an acknowledgment in the product
|
|
||||||
* documentation would be appreciated but is not required.
|
|
||||||
*
|
|
||||||
* 2. Altered source versions must be plainly marked as such, and
|
|
||||||
* must not be misrepresented as being the original software.
|
|
||||||
*
|
|
||||||
* 3. This notice may not be removed or altered from any source
|
|
||||||
* distribution.
|
|
||||||
***************************************************************************/
|
|
||||||
#ifndef __GX2_FUNCTIONS_H_
|
|
||||||
#define __GX2_FUNCTIONS_H_
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
extern "C" {
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include "gx2_types.h"
|
|
||||||
|
|
||||||
extern unsigned int gx2_handle;
|
|
||||||
|
|
||||||
void InitGX2FunctionPointers(void);
|
|
||||||
void InitAcquireGX2(void);
|
|
||||||
|
|
||||||
extern void (* GX2Init)(u32 * init_attribs);
|
|
||||||
extern void (* GX2Shutdown)(void);
|
|
||||||
extern void (* GX2Flush)(void);
|
|
||||||
extern s32 (* GX2GetMainCoreId)(void) ;
|
|
||||||
extern s32 (* GX2DrawDone)(void);
|
|
||||||
extern void (* GX2ClearColor)(GX2ColorBuffer *colorBuffer, f32 r, f32 g, f32 b, f32 a);
|
|
||||||
extern void (* GX2SetViewport)(f32 x, f32 y, f32 w, f32 h, f32 nearZ, f32 farZ);
|
|
||||||
extern void (* GX2SetScissor)(u32 x_orig, u32 y_orig, u32 wd, u32 ht);
|
|
||||||
extern void (* GX2SetContextState)(const GX2ContextState* state);
|
|
||||||
extern void (* GX2DrawEx)(s32 primitive_type, u32 count, u32 first_vertex, u32 instances_count);
|
|
||||||
extern void (* GX2DrawIndexedEx)(s32 primitive_type, u32 count, s32 index_format, const void* idx, u32 first_vertex, u32 instances_count);
|
|
||||||
extern void (* GX2ClearDepthStencilEx)(GX2DepthBuffer *depthBuffer, f32 depth_value, u8 stencil_value, s32 clear_mode);
|
|
||||||
extern void (* GX2SetClearDepthStencil)(GX2DepthBuffer *depthBuffer, f32 depth_value, u8 stencil_value);
|
|
||||||
extern void (* GX2CopyColorBufferToScanBuffer)(const GX2ColorBuffer *colorBuffer, s32 scan_target);
|
|
||||||
extern void (* GX2SwapScanBuffers)(void);
|
|
||||||
extern void (* GX2SetTVEnable)(s32 enable);
|
|
||||||
extern void (* GX2SetSwapInterval)(u32 swap_interval);
|
|
||||||
extern u32 (* GX2GetSwapInterval)(void);
|
|
||||||
extern void (* GX2WaitForVsync)(void);
|
|
||||||
extern void (* GX2CalcTVSize)(s32 tv_render_mode, s32 format, s32 buffering_mode, u32 * size, s32 * scale_needed);
|
|
||||||
extern void (* GX2Invalidate)(s32 invalidate_type, void * ptr, u32 buffer_size);
|
|
||||||
extern void (* GX2SetTVBuffer)(void *buffer, u32 buffer_size, s32 tv_render_mode, s32 format, s32 buffering_mode);
|
|
||||||
extern void (* GX2CalcSurfaceSizeAndAlignment)(GX2Surface *surface);
|
|
||||||
extern void (* GX2InitDepthBufferRegs)(GX2DepthBuffer *depthBuffer);
|
|
||||||
extern void (* GX2InitColorBufferRegs)(GX2ColorBuffer *colorBuffer);
|
|
||||||
extern void (* GX2CalcColorBufferAuxInfo)(GX2ColorBuffer *colorBuffer, u32 *size, u32 *align);
|
|
||||||
extern void (* GX2CalcDepthBufferHiZInfo)(GX2DepthBuffer *depthBuffer, u32 *size, u32 *align);
|
|
||||||
extern void (* GX2InitDepthBufferHiZEnable)(GX2DepthBuffer *depthBuffer, s32 hiZ_enable);
|
|
||||||
extern void (* GX2SetupContextStateEx)(GX2ContextState* state, s32 enable_profiling);
|
|
||||||
extern void (* GX2SetColorBuffer)(const GX2ColorBuffer *colorBuffer, s32 target);
|
|
||||||
extern void (* GX2SetDepthBuffer)(const GX2DepthBuffer *depthBuffer);
|
|
||||||
extern void (* GX2SetAttribBuffer)(u32 attr_index, u32 attr_size, u32 stride, const void* attr);
|
|
||||||
extern void (* GX2InitTextureRegs)(GX2Texture *texture);
|
|
||||||
extern void (* GX2InitSampler)(GX2Sampler *sampler, s32 tex_clamp, s32 min_mag_filter);
|
|
||||||
extern u32 (* GX2CalcFetchShaderSizeEx)(u32 num_attrib, s32 fetch_shader_type, s32 tessellation_mode);
|
|
||||||
extern void (* GX2InitFetchShaderEx)(GX2FetchShader* fs, void* fs_buffer, u32 count, const GX2AttribStream* attribs, s32 fetch_shader_type, s32 tessellation_mode);
|
|
||||||
extern void (* GX2SetFetchShader)(const GX2FetchShader* fs);
|
|
||||||
extern void (* GX2SetVertexUniformReg)(u32 offset, u32 count, const void *values);
|
|
||||||
extern void (* GX2SetPixelUniformReg)(u32 offset, u32 count, const void *values);
|
|
||||||
extern void (* GX2SetPixelTexture)(const GX2Texture *texture, u32 texture_hw_location);
|
|
||||||
extern void (* GX2SetVertexTexture)(const GX2Texture *texture, u32 texture_hw_location);
|
|
||||||
extern void (* GX2SetPixelSampler)(const GX2Sampler *sampler, u32 sampler_hw_location);
|
|
||||||
extern void (* GX2SetVertexSampler)(const GX2Sampler *sampler, u32 sampler_hw_location);
|
|
||||||
extern void (* GX2SetPixelShader)(const GX2PixelShader* pixelShader);
|
|
||||||
extern void (* GX2SetVertexShader)(const GX2VertexShader* vertexShader);
|
|
||||||
extern void (* GX2InitSamplerZMFilter)(GX2Sampler *sampler, s32 z_filter, s32 mip_filter);
|
|
||||||
extern void (* GX2SetColorControl)(s32 lop, u8 blend_enable_mask, s32 enable_multi_write, s32 enable_color_buffer);
|
|
||||||
extern void (* GX2SetDepthOnlyControl)(s32 enable_depth, s32 enable_depth_write, s32 depth_comp_function);
|
|
||||||
extern void (* GX2SetBlendControl)(s32 target, s32 color_src_blend, s32 color_dst_blend, s32 color_combine, s32 separate_alpha_blend, s32 alpha_src_blend, s32 alpha_dst_blend, s32 alpha_combine);
|
|
||||||
extern void (* GX2CalcDRCSize)(s32 drc_mode, s32 format, s32 buffering_mode, u32 *size, s32 *scale_needed);
|
|
||||||
extern void (* GX2SetDRCBuffer)(void *buffer, u32 buffer_size, s32 drc_mode, s32 surface_format, s32 buffering_mode);
|
|
||||||
extern void (* GX2SetDRCScale)(u32 width, u32 height);
|
|
||||||
extern void (* GX2SetDRCEnable)(s32 enable);
|
|
||||||
extern void (* GX2SetPolygonControl)(s32 front_face_mode, s32 cull_front, s32 cull_back, s32 enable_mode, s32 mode_font, s32 mode_back, s32 poly_offset_front, s32 poly_offset_back, s32 point_line_offset);
|
|
||||||
extern void (* GX2SetCullOnlyControl)(s32 front_face_mode, s32 cull_front, s32 cull_back);
|
|
||||||
extern void (* GX2SetDepthStencilControl)(s32 enable_depth_test, s32 enable_depth_write, s32 depth_comp_function, s32 stencil_test_enable, s32 back_stencil_enable,
|
|
||||||
s32 font_stencil_func, s32 front_stencil_z_pass, s32 front_stencil_z_fail, s32 front_stencil_fail,
|
|
||||||
s32 back_stencil_func, s32 back_stencil_z_pass, s32 back_stencil_z_fail, s32 back_stencil_fail);
|
|
||||||
extern void (* GX2SetStencilMask)(u8 mask_front, u8 write_mask_front, u8 ref_front, u8 mask_back, u8 write_mask_back, u8 ref_back);
|
|
||||||
extern void (* GX2SetLineWidth)(f32 width);
|
|
||||||
extern void (* GX2SetTVGamma)(f32 val);
|
|
||||||
extern void (* GX2SetDRCGamma)(f32 val);
|
|
||||||
extern s32 (* GX2GetSystemTVScanMode)(void);
|
|
||||||
extern s32 (* GX2GetSystemDRCScanMode)(void);
|
|
||||||
extern void (* GX2RSetAllocator)(void * (*allocFunc)(u32, u32, u32), void (*freeFunc)(u32, void*));
|
|
||||||
extern void (* GX2CopySurface)(GX2Surface * srcSurface,u32 srcMip,u32 srcSlice,GX2Surface * dstSurface,u32 dstMip,u32 dstSlice );
|
|
||||||
extern void (* GX2ClearBuffersEx)(GX2ColorBuffer * colorBuffer,GX2DepthBuffer * depthBuffer,f32 r, f32 g, f32 b, f32 a,f32 depthValue,u8 stencilValue,int clearFlags);
|
|
||||||
|
|
||||||
static inline void GX2InitDepthBuffer(GX2DepthBuffer *depthBuffer, s32 dimension, u32 width, u32 height, u32 depth, s32 format, s32 aa)
|
|
||||||
{
|
|
||||||
depthBuffer->surface.dimension = dimension;
|
|
||||||
depthBuffer->surface.width = width;
|
|
||||||
depthBuffer->surface.height = height;
|
|
||||||
depthBuffer->surface.depth = depth;
|
|
||||||
depthBuffer->surface.num_mips = 1;
|
|
||||||
depthBuffer->surface.format = format;
|
|
||||||
depthBuffer->surface.aa = aa;
|
|
||||||
depthBuffer->surface.use = ((format==GX2_SURFACE_FORMAT_D_D24_S8_UNORM) || (format==GX2_SURFACE_FORMAT_D_D24_S8_FLOAT)) ? GX2_SURFACE_USE_DEPTH_BUFFER : GX2_SURFACE_USE_DEPTH_BUFFER_TEXTURE;
|
|
||||||
depthBuffer->surface.tile = GX2_TILE_MODE_DEFAULT;
|
|
||||||
depthBuffer->surface.swizzle = 0;
|
|
||||||
depthBuffer->view_mip = 0;
|
|
||||||
depthBuffer->view_first_slice = 0;
|
|
||||||
depthBuffer->view_slices_count = depth;
|
|
||||||
depthBuffer->clear_depth = 1.0f;
|
|
||||||
depthBuffer->clear_stencil = 0;
|
|
||||||
depthBuffer->hiZ_data = NULL;
|
|
||||||
depthBuffer->hiZ_size = 0;
|
|
||||||
GX2CalcSurfaceSizeAndAlignment(&depthBuffer->surface);
|
|
||||||
GX2InitDepthBufferRegs(depthBuffer);
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline void GX2InitColorBuffer(GX2ColorBuffer *colorBuffer, s32 dimension, u32 width, u32 height, u32 depth, s32 format, s32 aa)
|
|
||||||
{
|
|
||||||
colorBuffer->surface.dimension = dimension;
|
|
||||||
colorBuffer->surface.width = width;
|
|
||||||
colorBuffer->surface.height = height;
|
|
||||||
colorBuffer->surface.depth = depth;
|
|
||||||
colorBuffer->surface.num_mips = 1;
|
|
||||||
colorBuffer->surface.format = format;
|
|
||||||
colorBuffer->surface.aa = aa;
|
|
||||||
colorBuffer->surface.use = GX2_SURFACE_USE_COLOR_BUFFER_TEXTURE_FTV;
|
|
||||||
colorBuffer->surface.image_size = 0;
|
|
||||||
colorBuffer->surface.image_data = NULL;
|
|
||||||
colorBuffer->surface.mip_size = 0;
|
|
||||||
colorBuffer->surface.mip_data = NULL;
|
|
||||||
colorBuffer->surface.tile = GX2_TILE_MODE_DEFAULT;
|
|
||||||
colorBuffer->surface.swizzle = 0;
|
|
||||||
colorBuffer->surface.align = 0;
|
|
||||||
colorBuffer->surface.pitch = 0;
|
|
||||||
u32 i;
|
|
||||||
for(i = 0; i < 13; i++)
|
|
||||||
colorBuffer->surface.mip_offset[i] = 0;
|
|
||||||
colorBuffer->view_mip = 0;
|
|
||||||
colorBuffer->view_first_slice = 0;
|
|
||||||
colorBuffer->view_slices_count = depth;
|
|
||||||
colorBuffer->aux_data = NULL;
|
|
||||||
colorBuffer->aux_size = 0;
|
|
||||||
for(i = 0; i < 5; i++)
|
|
||||||
colorBuffer->regs[i] = 0;
|
|
||||||
|
|
||||||
GX2CalcSurfaceSizeAndAlignment(&colorBuffer->surface);
|
|
||||||
GX2InitColorBufferRegs(colorBuffer);
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline void GX2InitAttribStream(GX2AttribStream* attr, u32 location, u32 buffer, u32 offset, s32 format)
|
|
||||||
{
|
|
||||||
attr->location = location;
|
|
||||||
attr->buffer = buffer;
|
|
||||||
attr->offset = offset;
|
|
||||||
attr->format = format;
|
|
||||||
attr->index_type = 0;
|
|
||||||
attr->divisor = 0;
|
|
||||||
attr->destination_selector = attribute_dest_comp_selector[format & 0xff];
|
|
||||||
attr->endian_swap = GX2_ENDIANSWAP_DEFAULT;
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline void GX2InitTexture(GX2Texture *tex, u32 width, u32 height, u32 depth, u32 num_mips, s32 format, s32 dimension, s32 tile)
|
|
||||||
{
|
|
||||||
tex->surface.dimension = dimension;
|
|
||||||
tex->surface.width = width;
|
|
||||||
tex->surface.height = height;
|
|
||||||
tex->surface.depth = depth;
|
|
||||||
tex->surface.num_mips = num_mips;
|
|
||||||
tex->surface.format = format;
|
|
||||||
tex->surface.aa = GX2_AA_MODE_1X;
|
|
||||||
tex->surface.use = GX2_SURFACE_USE_TEXTURE;
|
|
||||||
tex->surface.image_size = 0;
|
|
||||||
tex->surface.image_data = NULL;
|
|
||||||
tex->surface.mip_size = 0;
|
|
||||||
tex->surface.mip_data = NULL;
|
|
||||||
tex->surface.tile = tile;
|
|
||||||
tex->surface.swizzle = 0;
|
|
||||||
tex->surface.align = 0;
|
|
||||||
tex->surface.pitch = 0;
|
|
||||||
u32 i;
|
|
||||||
for(i = 0; i < 13; i++)
|
|
||||||
tex->surface.mip_offset[i] = 0;
|
|
||||||
tex->view_first_mip = 0;
|
|
||||||
tex->view_mips_count = num_mips;
|
|
||||||
tex->view_first_slice = 0;
|
|
||||||
tex->view_slices_count = depth;
|
|
||||||
tex->component_selector = texture_comp_selector[format & 0x3f];
|
|
||||||
for(i = 0; i < 5; i++)
|
|
||||||
tex->regs[i] = 0;
|
|
||||||
|
|
||||||
GX2CalcSurfaceSizeAndAlignment(&tex->surface);
|
|
||||||
GX2InitTextureRegs(tex);
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif // __GX2_FUNCTIONS_H_
|
|
@ -1,699 +0,0 @@
|
|||||||
/****************************************************************************
|
|
||||||
* Copyright (C) 2015
|
|
||||||
* by Dimok
|
|
||||||
*
|
|
||||||
* This software is provided 'as-is', without any express or implied
|
|
||||||
* warranty. In no event will the authors be held liable for any
|
|
||||||
* damages arising from the use of this software.
|
|
||||||
*
|
|
||||||
* Permission is granted to anyone to use this software for any
|
|
||||||
* purpose, including commercial applications, and to alter it and
|
|
||||||
* redistribute it freely, subject to the following restrictions:
|
|
||||||
*
|
|
||||||
* 1. The origin of this software must not be misrepresented; you
|
|
||||||
* must not claim that you wrote the original software. If you use
|
|
||||||
* this software in a product, an acknowledgment in the product
|
|
||||||
* documentation would be appreciated but is not required.
|
|
||||||
*
|
|
||||||
* 2. Altered source versions must be plainly marked as such, and
|
|
||||||
* must not be misrepresented as being the original software.
|
|
||||||
*
|
|
||||||
* 3. This notice may not be removed or altered from any source
|
|
||||||
* distribution.
|
|
||||||
***************************************************************************/
|
|
||||||
#ifndef _GX2_TYPES_H_
|
|
||||||
#define _GX2_TYPES_H_
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
extern "C" {
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include <gctypes.h>
|
|
||||||
|
|
||||||
//!-----------------------------------------------------------------------------------------------------------------------
|
|
||||||
//! Constants
|
|
||||||
//!-----------------------------------------------------------------------------------------------------------------------
|
|
||||||
#define GX2_COMMAND_BUFFER_SIZE 0x400000
|
|
||||||
#define GX2_SCAN_BUFFER_ALIGNMENT 0x1000
|
|
||||||
#define GX2_SHADER_ALIGNMENT 0x100
|
|
||||||
#define GX2_CONTEXT_STATE_ALIGNMENT 0x100
|
|
||||||
#define GX2_DISPLAY_LIST_ALIGNMENT 0x20
|
|
||||||
#define GX2_VERTEX_BUFFER_ALIGNMENT 0x40
|
|
||||||
#define GX2_INDEX_BUFFER_ALIGNMENT 0x20
|
|
||||||
|
|
||||||
#define GX2_CONTEXT_STATE_SIZE 0xA100
|
|
||||||
|
|
||||||
#define GX2_AUX_BUFFER_CLEAR_VALUE 0xCC
|
|
||||||
|
|
||||||
//!-----------------------------------------------------------------------------------------------------------------------
|
|
||||||
//! Common
|
|
||||||
//!-----------------------------------------------------------------------------------------------------------------------
|
|
||||||
#define GX2_FALSE 0
|
|
||||||
#define GX2_TRUE 1
|
|
||||||
#define GX2_DISABLE 0
|
|
||||||
#define GX2_ENABLE 1
|
|
||||||
|
|
||||||
//!-----------------------------------------------------------------------------------------------------------------------
|
|
||||||
//! GX2InitAttrib
|
|
||||||
//!-----------------------------------------------------------------------------------------------------------------------
|
|
||||||
#define GX2_INIT_ATTRIB_NULL 0
|
|
||||||
#define GX2_INIT_ATTRIB_CB_BASE 1
|
|
||||||
#define GX2_INIT_ATTRIB_CB_SIZE 2
|
|
||||||
#define GX2_INIT_ATTRIB_ARGC 7
|
|
||||||
#define GX2_INIT_ATTRIB_ARGV 8
|
|
||||||
|
|
||||||
//!-----------------------------------------------------------------------------------------------------------------------
|
|
||||||
//! GX2 compare functions
|
|
||||||
//!-----------------------------------------------------------------------------------------------------------------------
|
|
||||||
#define GX2_COMPARE_NEVER 0
|
|
||||||
#define GX2_COMPARE_LESS 1
|
|
||||||
#define GX2_COMPARE_EQUAL 2
|
|
||||||
#define GX2_COMPARE_LEQUAL 3
|
|
||||||
#define GX2_COMPARE_GREATER 4
|
|
||||||
#define GX2_COMPARE_NOTEQUAL 5
|
|
||||||
#define GX2_COMPARE_GEQUAL 6
|
|
||||||
#define GX2_COMPARE_ALWAYS 7
|
|
||||||
|
|
||||||
//!-----------------------------------------------------------------------------------------------------------------------
|
|
||||||
//! GX2 stencil functions
|
|
||||||
//!-----------------------------------------------------------------------------------------------------------------------
|
|
||||||
#define GX2_STENCIL_KEEP 0
|
|
||||||
#define GX2_STENCIL_ZERO 1
|
|
||||||
#define GX2_STENCIL_REPLACE 2
|
|
||||||
#define GX2_STENCIL_INCR 3
|
|
||||||
#define GX2_STENCIL_DECR 4
|
|
||||||
#define GX2_STENCIL_INVERT 5
|
|
||||||
#define GX2_STENCIL_INCR_WRAP 6
|
|
||||||
#define GX2_STENCIL_DECR_WRAP 7
|
|
||||||
|
|
||||||
//!-----------------------------------------------------------------------------------------------------------------------
|
|
||||||
//! GX2 logic op functions
|
|
||||||
//!-----------------------------------------------------------------------------------------------------------------------
|
|
||||||
#define GX2_LOGIC_OP_CLEAR 0x00
|
|
||||||
#define GX2_LOGIC_OP_NOR 0x11
|
|
||||||
#define GX2_LOGIC_OP_INVAND 0x22
|
|
||||||
#define GX2_LOGIC_OP_INVCOPY 0x33
|
|
||||||
#define GX2_LOGIC_OP_REVAND 0x44
|
|
||||||
#define GX2_LOGIC_OP_INV 0x55
|
|
||||||
#define GX2_LOGIC_OP_XOR 0x66
|
|
||||||
#define GX2_LOGIC_OP_NAND 0x77
|
|
||||||
#define GX2_LOGIC_OP_AND 0x88
|
|
||||||
#define GX2_LOGIC_OP_EQUIV 0x99
|
|
||||||
#define GX2_LOGIC_OP_NOOP 0xAA
|
|
||||||
#define GX2_LOGIC_OP_INVOR 0xBB
|
|
||||||
#define GX2_LOGIC_OP_COPY 0xCC
|
|
||||||
#define GX2_LOGIC_OP_REVOR 0xDD
|
|
||||||
#define GX2_LOGIC_OP_OR 0xEE
|
|
||||||
#define GX2_LOGIC_OP_SET 0xFF
|
|
||||||
|
|
||||||
//!-----------------------------------------------------------------------------------------------------------------------
|
|
||||||
//! GX2 blend combination functions
|
|
||||||
//!-----------------------------------------------------------------------------------------------------------------------
|
|
||||||
#define GX2_BLEND_COMBINE_ADD 0x00
|
|
||||||
#define GX2_BLEND_COMBINE_SRC_MINUS_DST 0x01
|
|
||||||
#define GX2_BLEND_COMBINE_MIN 0x02
|
|
||||||
#define GX2_BLEND_COMBINE_MAX 0x03
|
|
||||||
#define GX2_BLEND_COMBINE_DST_MINUS_SRC 0x04
|
|
||||||
|
|
||||||
//!-----------------------------------------------------------------------------------------------------------------------
|
|
||||||
//! GX2 blend functions
|
|
||||||
//!-----------------------------------------------------------------------------------------------------------------------
|
|
||||||
#define GX2_BLEND_ZERO 0x00
|
|
||||||
#define GX2_BLEND_ONE 0x01
|
|
||||||
#define GX2_BLEND_SRC_ALPHA 0x04
|
|
||||||
#define GX2_BLEND_ONE_MINUS_SRC_ALPHA 0x05
|
|
||||||
|
|
||||||
//!-----------------------------------------------------------------------------------------------------------------------
|
|
||||||
//! GX2 render targets
|
|
||||||
//!-----------------------------------------------------------------------------------------------------------------------
|
|
||||||
#define GX2_RENDER_TARGET_0 0
|
|
||||||
#define GX2_RENDER_TARGET_1 1
|
|
||||||
#define GX2_RENDER_TARGET_2 2
|
|
||||||
#define GX2_RENDER_TARGET_3 3
|
|
||||||
#define GX2_RENDER_TARGET_4 4
|
|
||||||
#define GX2_RENDER_TARGET_5 5
|
|
||||||
#define GX2_RENDER_TARGET_6 6
|
|
||||||
#define GX2_RENDER_TARGET_7 7
|
|
||||||
|
|
||||||
//!-----------------------------------------------------------------------------------------------------------------------
|
|
||||||
//! GX2 cull modes
|
|
||||||
//!-----------------------------------------------------------------------------------------------------------------------
|
|
||||||
#define GX2_FRONT_FACE_CCW 0
|
|
||||||
#define GX2_FRONT_FACE_CW 1
|
|
||||||
//!-----------------------------------------------------------------------------------------------------------------------
|
|
||||||
//! GX2 polygon modes
|
|
||||||
//!-----------------------------------------------------------------------------------------------------------------------
|
|
||||||
#define GX2_POLYGON_MODE_POINT 0
|
|
||||||
#define GX2_POLYGON_MODE_LINE 1
|
|
||||||
#define GX2_POLYGON_MODE_TRIANGLE 2
|
|
||||||
|
|
||||||
//!-----------------------------------------------------------------------------------------------------------------------
|
|
||||||
//! GX2 special states
|
|
||||||
//!-----------------------------------------------------------------------------------------------------------------------
|
|
||||||
#define GX2_SPECIAL_STATE_CLEAR 0
|
|
||||||
#define GX2_SPECIAL_STATE_CLEAR_HIZ 1
|
|
||||||
#define GX2_SPECIAL_STATE_COPY 2
|
|
||||||
#define GX2_SPECIAL_STATE_EXPAND_COLOR 3
|
|
||||||
#define GX2_SPECIAL_STATE_EXPAND_DEPTH 4
|
|
||||||
#define GX2_SPECIAL_STATE_CONVERT_DEPTH 5
|
|
||||||
#define GX2_SPECIAL_STATE_CONVERT_AADEPTH 6
|
|
||||||
#define GX2_SPECIAL_STATE_RESOLVE_COLOR 7
|
|
||||||
#define GX2_SPECIAL_STATE_CLEAR_COLOR_AS_DEPTH 8
|
|
||||||
|
|
||||||
//!-----------------------------------------------------------------------------------------------------------------------
|
|
||||||
//! GX2 attribute formats
|
|
||||||
//!-----------------------------------------------------------------------------------------------------------------------
|
|
||||||
#define GX2_ATTRIB_FORMAT_8_UNORM 0x00000000
|
|
||||||
#define GX2_ATTRIB_FORMAT_4_4_UNORM 0x00000001
|
|
||||||
#define GX2_ATTRIB_FORMAT_16_UNORM 0x00000002
|
|
||||||
#define GX2_ATTRIB_FORMAT_8_8_UNORM 0x00000004
|
|
||||||
#define GX2_ATTRIB_FORMAT_16_16_UNORM 0x00000007
|
|
||||||
#define GX2_ATTRIB_FORMAT_8_8_8_8_UNORM 0x0000000A
|
|
||||||
#define GX2_ATTRIB_FORMAT_10_10_10_2_UNORM 0x0000000B
|
|
||||||
#define GX2_ATTRIB_FORMAT_16_16_16_16_UNORM 0x0000000E
|
|
||||||
|
|
||||||
#define GX2_ATTRIB_FORMAT_8_UINT 0x00000100
|
|
||||||
#define GX2_ATTRIB_FORMAT_16_UINT 0x00000102
|
|
||||||
#define GX2_ATTRIB_FORMAT_8_8_UINT 0x00000104
|
|
||||||
#define GX2_ATTRIB_FORMAT_32_UINT 0x00000105
|
|
||||||
#define GX2_ATTRIB_FORMAT_16_16_UINT 0x00000107
|
|
||||||
#define GX2_ATTRIB_FORMAT_8_8_8_8_UINT 0x0000010A
|
|
||||||
#define GX2_ATTRIB_FORMAT_10_10_10_2_UINT 0x0000010B
|
|
||||||
#define GX2_ATTRIB_FORMAT_32_32_UINT 0x0000010C
|
|
||||||
#define GX2_ATTRIB_FORMAT_16_16_16_16_UINT 0x0000010E
|
|
||||||
#define GX2_ATTRIB_FORMAT_32_32_32_UINT 0x00000110
|
|
||||||
#define GX2_ATTRIB_FORMAT_32_32_32_32_UINT 0x00000112
|
|
||||||
|
|
||||||
#define GX2_ATTRIB_FORMAT_8_SNORM 0x00000200
|
|
||||||
#define GX2_ATTRIB_FORMAT_16_SNORM 0x00000202
|
|
||||||
#define GX2_ATTRIB_FORMAT_8_8_SNORM 0x00000204
|
|
||||||
#define GX2_ATTRIB_FORMAT_16_16_SNORM 0x00000207
|
|
||||||
#define GX2_ATTRIB_FORMAT_8_8_8_8_SNORM 0x0000020A
|
|
||||||
#define GX2_ATTRIB_FORMAT_10_10_10_2_SNORM 0x0000020B
|
|
||||||
#define GX2_ATTRIB_FORMAT_16_16_16_16_SNORM 0x0000020E
|
|
||||||
|
|
||||||
#define GX2_ATTRIB_FORMAT_8_SINT 0x00000300
|
|
||||||
#define GX2_ATTRIB_FORMAT_16_SINT 0x00000303
|
|
||||||
#define GX2_ATTRIB_FORMAT_8_8_SINT 0x00000304
|
|
||||||
#define GX2_ATTRIB_FORMAT_32_SINT 0x00000305
|
|
||||||
#define GX2_ATTRIB_FORMAT_16_16_SINT 0x00000307
|
|
||||||
#define GX2_ATTRIB_FORMAT_8_8_8_8_SINT 0x0000030A
|
|
||||||
#define GX2_ATTRIB_FORMAT_10_10_10_2_SINT 0x0000030B
|
|
||||||
#define GX2_ATTRIB_FORMAT_32_32_SINT 0x0000030C
|
|
||||||
#define GX2_ATTRIB_FORMAT_16_16_16_16_SINT 0x0000030E
|
|
||||||
#define GX2_ATTRIB_FORMAT_32_32_32_SINT 0x00000310
|
|
||||||
#define GX2_ATTRIB_FORMAT_32_32_32_32_SINT 0x00000312
|
|
||||||
|
|
||||||
#define GX2_ATTRIB_FORMAT_8_UINT_TO_FLOAT 0x00000800
|
|
||||||
#define GX2_ATTRIB_FORMAT_16_UINT_TO_FLOAT 0x00000802
|
|
||||||
#define GX2_ATTRIB_FORMAT_16_FLOAT 0x00000803
|
|
||||||
#define GX2_ATTRIB_FORMAT_8_8_UINT_TO_FLOAT 0x00000804
|
|
||||||
#define GX2_ATTRIB_FORMAT_32_FLOAT 0x00000806
|
|
||||||
#define GX2_ATTRIB_FORMAT_16_16_UINT_TO_FLOAT 0x00000807
|
|
||||||
#define GX2_ATTRIB_FORMAT_16_16_FLOAT 0x00000808
|
|
||||||
#define GX2_ATTRIB_FORMAT_10_11_11_FLOAT 0x00000809
|
|
||||||
#define GX2_ATTRIB_FORMAT_8_8_8_8_UINT_TO_FLOAT 0x0000080A
|
|
||||||
#define GX2_ATTRIB_FORMAT_32_32_FLOAT 0x0000080D
|
|
||||||
#define GX2_ATTRIB_FORMAT_16_16_16_16_UINT_TO_FLOAT 0x0000080E
|
|
||||||
#define GX2_ATTRIB_FORMAT_16_16_16_16_FLOAT 0x0000080F
|
|
||||||
#define GX2_ATTRIB_FORMAT_32_32_32_FLOAT 0x00000811
|
|
||||||
#define GX2_ATTRIB_FORMAT_32_32_32_32_FLOAT 0x00000813
|
|
||||||
|
|
||||||
#define GX2_ATTRIB_FORMAT_8_SINT_TO_FLOAT 0x00000A00
|
|
||||||
#define GX2_ATTRIB_FORMAT_16_SINT_TO_FLOAT 0x00000A02
|
|
||||||
#define GX2_ATTRIB_FORMAT_8_8_SINT_TO_FLOAT 0x00000A04
|
|
||||||
#define GX2_ATTRIB_FORMAT_16_16_SINT_TO_FLOAT 0x00000A07
|
|
||||||
#define GX2_ATTRIB_FORMAT_8_8_8_8_SINT_TO_FLOAT 0x00000A0A
|
|
||||||
#define GX2_ATTRIB_FORMAT_16_16_16_16_SINT_TO_FLOAT 0x00000A0E
|
|
||||||
|
|
||||||
//!-----------------------------------------------------------------------------------------------------------------------
|
|
||||||
//! GX2 shader modes
|
|
||||||
//!-----------------------------------------------------------------------------------------------------------------------
|
|
||||||
#define GX2_SHADER_MODE_UNIFORM_REGISTER 0
|
|
||||||
#define GX2_SHADER_MODE_UNIFORM_BLOCK 1
|
|
||||||
#define GX2_SHADER_MODE_GEOMETRY_SHADER 2
|
|
||||||
#define GX2_SHADER_MODE_COMPUTE_SHADER 3
|
|
||||||
|
|
||||||
//!-----------------------------------------------------------------------------------------------------------------------
|
|
||||||
//! GX2 shader modes
|
|
||||||
//!-----------------------------------------------------------------------------------------------------------------------
|
|
||||||
#define GX2_COMP_SEL_NONE 0x04040405
|
|
||||||
#define GX2_COMP_SEL_X001 0x00040405
|
|
||||||
#define GX2_COMP_SEL_XY01 0x00010405
|
|
||||||
#define GX2_COMP_SEL_XYZ1 0x00010205
|
|
||||||
#define GX2_COMP_SEL_XYZW 0x00010203
|
|
||||||
#define GX2_COMP_SEL_XXXX 0x00000000
|
|
||||||
#define GX2_COMP_SEL_YYYY 0x01010101
|
|
||||||
#define GX2_COMP_SEL_ZZZZ 0x02020202
|
|
||||||
#define GX2_COMP_SEL_WWWW 0x03030303
|
|
||||||
#define GX2_COMP_SEL_WZYX 0x03020100
|
|
||||||
#define GX2_COMP_SEL_WXYZ 0x03000102
|
|
||||||
|
|
||||||
//!-----------------------------------------------------------------------------------------------------------------------
|
|
||||||
//! GX2 variable types
|
|
||||||
//!-----------------------------------------------------------------------------------------------------------------------
|
|
||||||
#define GX2_VAR_TYPE_VOID 0
|
|
||||||
#define GX2_VAR_TYPE_BOOL 1
|
|
||||||
#define GX2_VAR_TYPE_INT 2
|
|
||||||
#define GX2_VAR_TYPE_UINT 3
|
|
||||||
#define GX2_VAR_TYPE_FLOAT 4
|
|
||||||
#define GX2_VAR_TYPE_DOUBLE 5
|
|
||||||
#define GX2_VAR_TYPE_VEC2 9
|
|
||||||
#define GX2_VAR_TYPE_VEC3 10
|
|
||||||
#define GX2_VAR_TYPE_VEC4 11
|
|
||||||
#define GX2_VAR_TYPE_MAT2 21
|
|
||||||
#define GX2_VAR_TYPE_MAT3 25
|
|
||||||
#define GX2_VAR_TYPE_MAT4 29
|
|
||||||
|
|
||||||
//!-----------------------------------------------------------------------------------------------------------------------
|
|
||||||
//! GX2 sample types
|
|
||||||
//!-----------------------------------------------------------------------------------------------------------------------
|
|
||||||
#define GX2_SAMPLER_TYPE_2D 1
|
|
||||||
|
|
||||||
|
|
||||||
//!-----------------------------------------------------------------------------------------------------------------------
|
|
||||||
//! GX2 index formats
|
|
||||||
//!-----------------------------------------------------------------------------------------------------------------------
|
|
||||||
#define GX2_INDEX_FORMAT_U16 4
|
|
||||||
#define GX2_INDEX_FORMAT_U32 9
|
|
||||||
|
|
||||||
//!-----------------------------------------------------------------------------------------------------------------------
|
|
||||||
//! GX2 primitive types
|
|
||||||
//!-----------------------------------------------------------------------------------------------------------------------
|
|
||||||
#define GX2_PRIMITIVE_POINTS 0x01
|
|
||||||
#define GX2_PRIMITIVE_LINES 0x02
|
|
||||||
#define GX2_PRIMITIVE_LINE_STRIP 0x03
|
|
||||||
#define GX2_PRIMITIVE_TRIANGLES 0x04
|
|
||||||
#define GX2_PRIMITIVE_TRIANGLE_FAN 0x05
|
|
||||||
#define GX2_PRIMITIVE_TRIANGLE_STRIP 0x06
|
|
||||||
#define GX2_PRIMITIVE_RECTS 0x11
|
|
||||||
#define GX2_PRIMITIVE_QUADS 0x13
|
|
||||||
#define GX2_PRIMITIVE_QUAD_STRIP 0x14
|
|
||||||
|
|
||||||
//!-----------------------------------------------------------------------------------------------------------------------
|
|
||||||
//! GX2 clear modes
|
|
||||||
//!-----------------------------------------------------------------------------------------------------------------------
|
|
||||||
#define GX2_CLEAR_DEPTH 0x01
|
|
||||||
#define GX2_CLEAR_STENCIL 0x02
|
|
||||||
#define GX2_CLEAR_BOTH (GX2_CLEAR_DEPTH | GX2_CLEAR_STENCIL)
|
|
||||||
|
|
||||||
//!-----------------------------------------------------------------------------------------------------------------------
|
|
||||||
//! GX2 surface formats
|
|
||||||
//!-----------------------------------------------------------------------------------------------------------------------
|
|
||||||
#define GX2_SURFACE_FORMAT_TC_R8_UNORM 0x00000001
|
|
||||||
#define GX2_SURFACE_FORMAT_T_R4_G4_UNORM 0x00000002
|
|
||||||
#define GX2_SURFACE_FORMAT_TCD_R16_UNORM 0x00000005
|
|
||||||
#define GX2_SURFACE_FORMAT_TC_R8_G8_UNORM 0x00000007
|
|
||||||
#define GX2_SURFACE_FORMAT_TCS_R5_G6_B5_UNORM 0x00000008
|
|
||||||
#define GX2_SURFACE_FORMAT_TC_R5_G5_B5_A1_UNORM 0x0000000a
|
|
||||||
#define GX2_SURFACE_FORMAT_TC_R4_G4_B4_A4_UNORM 0x0000000b
|
|
||||||
#define GX2_SURFACE_FORMAT_TC_A1_B5_G5_R5_UNORM 0x0000000c
|
|
||||||
#define GX2_SURFACE_FORMAT_TC_R16_G16_UNORM 0x0000000f
|
|
||||||
#define GX2_SURFACE_FORMAT_D_D24_S8_UNORM 0x00000011
|
|
||||||
#define GX2_SURFACE_FORMAT_T_R24_UNORM_X8 0x00000011
|
|
||||||
#define GX2_SURFACE_FORMAT_TCS_R10_G10_B10_A2_UNORM 0x00000019
|
|
||||||
#define GX2_SURFACE_FORMAT_TCS_R8_G8_B8_A8_UNORM 0x0000001a
|
|
||||||
#define GX2_SURFACE_FORMAT_TCS_A2_B10_G10_R10_UNORM 0x0000001b
|
|
||||||
#define GX2_SURFACE_FORMAT_TC_R16_G16_B16_A16_UNORM 0x0000001f
|
|
||||||
#define GX2_SURFACE_FORMAT_T_BC1_UNORM 0x00000031
|
|
||||||
#define GX2_SURFACE_FORMAT_T_BC2_UNORM 0x00000032
|
|
||||||
#define GX2_SURFACE_FORMAT_T_BC3_UNORM 0x00000033
|
|
||||||
#define GX2_SURFACE_FORMAT_T_BC4_UNORM 0x00000034
|
|
||||||
#define GX2_SURFACE_FORMAT_T_BC5_UNORM 0x00000035
|
|
||||||
#define GX2_SURFACE_FORMAT_T_NV12_UNORM 0x00000081
|
|
||||||
|
|
||||||
#define GX2_SURFACE_FORMAT_TC_R8_UINT 0x00000101
|
|
||||||
#define GX2_SURFACE_FORMAT_TC_R16_UINT 0x00000105
|
|
||||||
#define GX2_SURFACE_FORMAT_TC_R8_G8_UINT 0x00000107
|
|
||||||
#define GX2_SURFACE_FORMAT_TC_R32_UINT 0x0000010d
|
|
||||||
#define GX2_SURFACE_FORMAT_TC_R16_G16_UINT 0x0000010f
|
|
||||||
#define GX2_SURFACE_FORMAT_T_X24_G8_UINT 0x00000111
|
|
||||||
#define GX2_SURFACE_FORMAT_TC_R10_G10_B10_A2_UINT 0x00000119
|
|
||||||
#define GX2_SURFACE_FORMAT_TC_R8_G8_B8_A8_UINT 0x0000011a
|
|
||||||
#define GX2_SURFACE_FORMAT_TC_A2_B10_G10_R10_UINT 0x0000011b
|
|
||||||
#define GX2_SURFACE_FORMAT_T_X32_G8_UINT_X24 0x0000011c
|
|
||||||
#define GX2_SURFACE_FORMAT_TC_R32_G32_UINT 0x0000011d
|
|
||||||
#define GX2_SURFACE_FORMAT_TC_R16_G16_B16_A16_UINT 0x0000011f
|
|
||||||
#define GX2_SURFACE_FORMAT_TC_R32_G32_B32_A32_UINT 0x00000122
|
|
||||||
|
|
||||||
#define GX2_SURFACE_FORMAT_TC_R8_SNORM 0x00000201
|
|
||||||
#define GX2_SURFACE_FORMAT_TC_R16_SNORM 0x00000205
|
|
||||||
#define GX2_SURFACE_FORMAT_TC_R8_G8_SNORM 0x00000207
|
|
||||||
#define GX2_SURFACE_FORMAT_TC_R16_G16_SNORM 0x0000020f
|
|
||||||
#define GX2_SURFACE_FORMAT_T_R10_G10_B10_A2_SNORM 0x00000219
|
|
||||||
#define GX2_SURFACE_FORMAT_TC_R10_G10_B10_A2_SNORM 0x00000219
|
|
||||||
#define GX2_SURFACE_FORMAT_TC_R8_G8_B8_A8_SNORM 0x0000021a
|
|
||||||
#define GX2_SURFACE_FORMAT_TC_R16_G16_B16_A16_SNORM 0x0000021f
|
|
||||||
#define GX2_SURFACE_FORMAT_T_BC4_SNORM 0x00000234
|
|
||||||
#define GX2_SURFACE_FORMAT_T_BC5_SNORM 0x00000235
|
|
||||||
|
|
||||||
#define GX2_SURFACE_FORMAT_TC_R8_SINT 0x00000301
|
|
||||||
#define GX2_SURFACE_FORMAT_TC_R16_SINT 0x00000305
|
|
||||||
#define GX2_SURFACE_FORMAT_TC_R8_G8_SINT 0x00000307
|
|
||||||
#define GX2_SURFACE_FORMAT_TC_R32_SINT 0x0000030d
|
|
||||||
#define GX2_SURFACE_FORMAT_TC_R16_G16_SINT 0x0000030f
|
|
||||||
#define GX2_SURFACE_FORMAT_TC_R10_G10_B10_A2_SINT 0x00000319
|
|
||||||
#define GX2_SURFACE_FORMAT_TC_R8_G8_B8_A8_SINT 0x0000031a
|
|
||||||
#define GX2_SURFACE_FORMAT_TC_R32_G32_SINT 0x0000031d
|
|
||||||
#define GX2_SURFACE_FORMAT_TC_R16_G16_B16_A16_SINT 0x0000031f
|
|
||||||
#define GX2_SURFACE_FORMAT_TC_R32_G32_B32_A32_SINT 0x00000322
|
|
||||||
|
|
||||||
#define GX2_SURFACE_FORMAT_TCS_R8_G8_B8_A8_SRGB 0x0000041a
|
|
||||||
#define GX2_SURFACE_FORMAT_T_BC1_SRGB 0x00000431
|
|
||||||
#define GX2_SURFACE_FORMAT_T_BC2_SRGB 0x00000432
|
|
||||||
#define GX2_SURFACE_FORMAT_T_BC3_SRGB 0x00000433
|
|
||||||
|
|
||||||
#define GX2_SURFACE_FORMAT_TC_R16_FLOAT 0x00000806
|
|
||||||
#define GX2_SURFACE_FORMAT_TCD_R32_FLOAT 0x0000080e
|
|
||||||
#define GX2_SURFACE_FORMAT_TC_R16_G16_FLOAT 0x00000810
|
|
||||||
#define GX2_SURFACE_FORMAT_D_D24_S8_FLOAT 0x00000811
|
|
||||||
#define GX2_SURFACE_FORMAT_TC_R11_G11_B10_FLOAT 0x00000816
|
|
||||||
#define GX2_SURFACE_FORMAT_D_D32_FLOAT_S8_UINT_X24 0x0000081c
|
|
||||||
#define GX2_SURFACE_FORMAT_T_R32_FLOAT_X8_X24 0x0000081c
|
|
||||||
#define GX2_SURFACE_FORMAT_TC_R32_G32_FLOAT 0x0000081e
|
|
||||||
#define GX2_SURFACE_FORMAT_TC_R16_G16_B16_A16_FLOAT 0x00000820
|
|
||||||
#define GX2_SURFACE_FORMAT_TC_R32_G32_B32_A32_FLOAT 0x00000823
|
|
||||||
|
|
||||||
//!-----------------------------------------------------------------------------------------------------------------------
|
|
||||||
//! GX2 tile modes
|
|
||||||
//!-----------------------------------------------------------------------------------------------------------------------
|
|
||||||
#define GX2_TILE_MODE_DEFAULT 0x00000000
|
|
||||||
#define GX2_TILE_MODE_LINEAR_ALIGNED 0x00000001
|
|
||||||
|
|
||||||
//!-----------------------------------------------------------------------------------------------------------------------
|
|
||||||
//! GX2 surface use
|
|
||||||
//!-----------------------------------------------------------------------------------------------------------------------
|
|
||||||
#define GX2_SURFACE_USE_TEXTURE 0x00000001
|
|
||||||
#define GX2_SURFACE_USE_COLOR_BUFFER 0x00000002
|
|
||||||
#define GX2_SURFACE_USE_DEPTH_BUFFER 0x00000004
|
|
||||||
#define GX2_SURFACE_USE_SCAN_BUFFER 0x00000008
|
|
||||||
#define GX2_SURFACE_USE_FTV 0x80000000
|
|
||||||
#define GX2_SURFACE_USE_COLOR_BUFFER_TEXTURE (GX2_SURFACE_USE_COLOR_BUFFER | GX2_SURFACE_USE_TEXTURE)
|
|
||||||
#define GX2_SURFACE_USE_DEPTH_BUFFER_TEXTURE (GX2_SURFACE_USE_DEPTH_BUFFER | GX2_SURFACE_USE_TEXTURE)
|
|
||||||
#define GX2_SURFACE_USE_COLOR_BUFFER_FTV (GX2_SURFACE_USE_COLOR_BUFFER | GX2_SURFACE_USE_FTV)
|
|
||||||
#define GX2_SURFACE_USE_COLOR_BUFFER_TEXTURE_FTV (GX2_SURFACE_USE_COLOR_BUFFER_TEXTURE | GX2_SURFACE_USE_FTV)
|
|
||||||
|
|
||||||
//!-----------------------------------------------------------------------------------------------------------------------
|
|
||||||
//! GX2 surface dim
|
|
||||||
//!-----------------------------------------------------------------------------------------------------------------------
|
|
||||||
#define GX2_SURFACE_DIM_1D 0x00000000
|
|
||||||
#define GX2_SURFACE_DIM_2D 0x00000001
|
|
||||||
#define GX2_SURFACE_DIM_3D 0x00000002
|
|
||||||
#define GX2_SURFACE_DIM_CUBE 0x00000003
|
|
||||||
#define GX2_SURFACE_DIM_1D_ARRAY 0x00000004
|
|
||||||
#define GX2_SURFACE_DIM_2D_ARRAY 0x00000005
|
|
||||||
#define GX2_SURFACE_DIM_2D_MSAA 0x00000006
|
|
||||||
#define GX2_SURFACE_DIM_2D_MSAA_ARRAY 0x00000007
|
|
||||||
|
|
||||||
//!-----------------------------------------------------------------------------------------------------------------------
|
|
||||||
//! GX2 AA modes
|
|
||||||
//!-----------------------------------------------------------------------------------------------------------------------
|
|
||||||
#define GX2_AA_MODE_1X 0x00000000
|
|
||||||
#define GX2_AA_MODE_2X 0x00000001
|
|
||||||
#define GX2_AA_MODE_4X 0x00000002
|
|
||||||
#define GX2_AA_MODE_8X 0x00000003
|
|
||||||
|
|
||||||
//!-----------------------------------------------------------------------------------------------------------------------
|
|
||||||
//! GX2 texture clamp
|
|
||||||
//!-----------------------------------------------------------------------------------------------------------------------
|
|
||||||
#define GX2_TEX_CLAMP_WRAP 0x00000000
|
|
||||||
#define GX2_TEX_CLAMP_MIRROR 0x00000001
|
|
||||||
#define GX2_TEX_CLAMP_CLAMP 0x00000002
|
|
||||||
#define GX2_TEX_CLAMP_MIRROR_ONCE 0x00000003
|
|
||||||
#define GX2_TEX_CLAMP_CLAMP_HALF_BORDER 0x00000004
|
|
||||||
#define GX2_TEX_CLAMP_MIRROR_ONCE_HALF_BORDER 0x00000005
|
|
||||||
#define GX2_TEX_CLAMP_CLAMP_BORDER 0x00000006
|
|
||||||
#define GX2_TEX_CLAMP_MIRROR_ONCE_BORDER 0x00000007
|
|
||||||
|
|
||||||
//!-----------------------------------------------------------------------------------------------------------------------
|
|
||||||
//! GX2 texture filter
|
|
||||||
//!-----------------------------------------------------------------------------------------------------------------------
|
|
||||||
#define GX2_TEX_XY_FILTER_POINT 0x00000000
|
|
||||||
#define GX2_TEX_XY_FILTER_BILINEAR 0x00000001
|
|
||||||
|
|
||||||
//!-----------------------------------------------------------------------------------------------------------------------
|
|
||||||
//! GX2 TV scan modes
|
|
||||||
//!-----------------------------------------------------------------------------------------------------------------------
|
|
||||||
#define GX2_TV_SCAN_MODE_NONE 0x00000000
|
|
||||||
#define GX2_TV_SCAN_MODE_576I 0x00000001
|
|
||||||
#define GX2_TV_SCAN_MODE_480I 0x00000002
|
|
||||||
#define GX2_TV_SCAN_MODE_480P 0x00000003
|
|
||||||
#define GX2_TV_SCAN_MODE_720P 0x00000004
|
|
||||||
#define GX2_TV_SCAN_MODE_1080I 0x00000006
|
|
||||||
#define GX2_TV_SCAN_MODE_1080P 0x00000007
|
|
||||||
|
|
||||||
//!-----------------------------------------------------------------------------------------------------------------------
|
|
||||||
//! GX2 TV render modes
|
|
||||||
//!-----------------------------------------------------------------------------------------------------------------------
|
|
||||||
#define GX2_TV_RENDER_480_NARROW 0x00000001
|
|
||||||
#define GX2_TV_RENDER_480_WIDE 0x00000002
|
|
||||||
#define GX2_TV_RENDER_720 0x00000003
|
|
||||||
#define GX2_TV_RENDER_1080 0x00000005
|
|
||||||
|
|
||||||
//!-----------------------------------------------------------------------------------------------------------------------
|
|
||||||
//! GX2 DRC render modes
|
|
||||||
//!-----------------------------------------------------------------------------------------------------------------------
|
|
||||||
#define GX2_DRC_NONE 0x00000000
|
|
||||||
#define GX2_DRC_SINGLE 0x00000001
|
|
||||||
#define GX2_DRC_DOUBLE 0x00000002
|
|
||||||
#define GX2_DRC_SINGLE_30HZ 0x00000004
|
|
||||||
|
|
||||||
//!-----------------------------------------------------------------------------------------------------------------------
|
|
||||||
//! GX2 buffering mode
|
|
||||||
//!-----------------------------------------------------------------------------------------------------------------------
|
|
||||||
#define GX2_BUFFERING_SINGLE 0x00000001
|
|
||||||
#define GX2_BUFFERING_DOUBLE 0x00000002
|
|
||||||
#define GX2_BUFFERING_TRIPLE 0x00000003
|
|
||||||
#define GX2_BUFFERING_QUAD
|
|
||||||
//!-----------------------------------------------------------------------------------------------------------------------
|
|
||||||
//! GX2 scan targets
|
|
||||||
//!-----------------------------------------------------------------------------------------------------------------------
|
|
||||||
#define GX2_SCAN_TARGET_TV 0x00000001
|
|
||||||
#define GX2_SCAN_TARGET_DRC_FIRST 0x00000004
|
|
||||||
#define GX2_SCAN_TARGET_DRC_SECOND 0x00000008
|
|
||||||
|
|
||||||
//!-----------------------------------------------------------------------------------------------------------------------
|
|
||||||
//! GX2 invalidate types
|
|
||||||
//!-----------------------------------------------------------------------------------------------------------------------
|
|
||||||
#define GX2_INVALIDATE_ATTRIB_BUFFER 0x00000001
|
|
||||||
#define GX2_INVALIDATE_TEXTURE 0x00000002
|
|
||||||
#define GX2_INVALIDATE_UNIFORM_BLOCK 0x00000004
|
|
||||||
#define GX2_INVALIDATE_SHADER 0x00000008
|
|
||||||
#define GX2_INVALIDATE_COLOR_BUFFER 0x00000010
|
|
||||||
#define GX2_INVALIDATE_DEPTH_BUFFER 0x00000020
|
|
||||||
#define GX2_INVALIDATE_CPU 0x00000040
|
|
||||||
#define GX2_INVALIDATE_CPU_ATTRIB_BUFFER (GX2_INVALIDATE_CPU | GX2_INVALIDATE_ATTRIB_BUFFER)
|
|
||||||
#define GX2_INVALIDATE_CPU_TEXTURE (GX2_INVALIDATE_CPU | GX2_INVALIDATE_TEXTURE)
|
|
||||||
#define GX2_INVALIDATE_CPU_UNIFORM_BLOCK (GX2_INVALIDATE_CPU | GX2_INVALIDATE_UNIFORM_BLOCK)
|
|
||||||
#define GX2_INVALIDATE_CPU_SHADER (GX2_INVALIDATE_CPU | GX2_INVALIDATE_SHADER)
|
|
||||||
|
|
||||||
//!-----------------------------------------------------------------------------------------------------------------------
|
|
||||||
//! GX2 swap modes
|
|
||||||
//!-----------------------------------------------------------------------------------------------------------------------
|
|
||||||
#define GX2_ENDIANSWAP_DEFAULT 0x00000003
|
|
||||||
|
|
||||||
//!-----------------------------------------------------------------------------------------------------------------------
|
|
||||||
//! GX2 tessellation modes
|
|
||||||
//!-----------------------------------------------------------------------------------------------------------------------
|
|
||||||
#define GX2_TESSELLATION_MODE_DISCRETE 0x00000000
|
|
||||||
#define GX2_TESSELLATION_MODE_CONTINUOUS 0x00000001
|
|
||||||
#define GX2_TESSELLATION_MODE_ADAPTIVE 0x00000002
|
|
||||||
|
|
||||||
//!-----------------------------------------------------------------------------------------------------------------------
|
|
||||||
//! GX2 fetch shader types
|
|
||||||
//!-----------------------------------------------------------------------------------------------------------------------
|
|
||||||
#define GX2_FETCH_SHADER_TESSELATION_NONE 0x00000000
|
|
||||||
#define GX2_FETCH_SHADER_TESSELATION_LINES 0x00000001
|
|
||||||
#define GX2_FETCH_SHADER_TESSELATION_TRIANGLES 0x00000002
|
|
||||||
#define GX2_FETCH_SHADER_TESSELATION_QUADS 0x00000003
|
|
||||||
|
|
||||||
|
|
||||||
typedef struct _GX2ContextState {
|
|
||||||
u8 data[GX2_CONTEXT_STATE_SIZE];
|
|
||||||
} GX2ContextState;
|
|
||||||
|
|
||||||
typedef struct _GX2Surface {
|
|
||||||
s32 dimension;
|
|
||||||
u32 width;
|
|
||||||
u32 height;
|
|
||||||
u32 depth;
|
|
||||||
u32 num_mips;
|
|
||||||
s32 format;
|
|
||||||
s32 aa;
|
|
||||||
s32 use;
|
|
||||||
u32 image_size;
|
|
||||||
void *image_data;
|
|
||||||
u32 mip_size;
|
|
||||||
void *mip_data;
|
|
||||||
s32 tile;
|
|
||||||
u32 swizzle;
|
|
||||||
u32 align;
|
|
||||||
u32 pitch;
|
|
||||||
u32 mip_offset[13];
|
|
||||||
} GX2Surface;
|
|
||||||
|
|
||||||
typedef struct _GX2ColorBuffer {
|
|
||||||
GX2Surface surface;
|
|
||||||
u32 view_mip;
|
|
||||||
u32 view_first_slice;
|
|
||||||
u32 view_slices_count;
|
|
||||||
void *aux_data;
|
|
||||||
u32 aux_size;
|
|
||||||
u32 regs[5];
|
|
||||||
} GX2ColorBuffer;
|
|
||||||
|
|
||||||
typedef struct _GX2DepthBuffer {
|
|
||||||
GX2Surface surface;
|
|
||||||
u32 view_mip;
|
|
||||||
u32 view_first_slice;
|
|
||||||
u32 view_slices_count;
|
|
||||||
void *hiZ_data;
|
|
||||||
u32 hiZ_size;
|
|
||||||
f32 clear_depth;
|
|
||||||
u32 clear_stencil;
|
|
||||||
u32 regs[7];
|
|
||||||
} GX2DepthBuffer;
|
|
||||||
|
|
||||||
|
|
||||||
typedef struct _GX2Texture {
|
|
||||||
GX2Surface surface;
|
|
||||||
u32 view_first_mip;
|
|
||||||
u32 view_mips_count;
|
|
||||||
u32 view_first_slice;
|
|
||||||
u32 view_slices_count;
|
|
||||||
u32 component_selector;
|
|
||||||
u32 regs[5];
|
|
||||||
} GX2Texture;
|
|
||||||
|
|
||||||
|
|
||||||
typedef struct _GX2Sampler {
|
|
||||||
u32 regs[3];
|
|
||||||
} GX2Sampler;
|
|
||||||
|
|
||||||
typedef struct _GX2AttribStream {
|
|
||||||
u32 location;
|
|
||||||
u32 buffer;
|
|
||||||
u32 offset;
|
|
||||||
s32 format;
|
|
||||||
s32 index_type;
|
|
||||||
u32 divisor;
|
|
||||||
u32 destination_selector;
|
|
||||||
s32 endian_swap;
|
|
||||||
} GX2AttribStream;
|
|
||||||
|
|
||||||
typedef struct _GX2FetchShader {
|
|
||||||
s32 type;
|
|
||||||
u32 reg;
|
|
||||||
u32 shader_size;
|
|
||||||
void *shader_program;
|
|
||||||
u32 attributes_count;
|
|
||||||
u32 divisor[3];
|
|
||||||
} GX2FetchShader;
|
|
||||||
|
|
||||||
typedef struct _GX2AttribVar
|
|
||||||
{
|
|
||||||
const char *name;
|
|
||||||
s32 var_type;
|
|
||||||
u32 array_count;
|
|
||||||
u32 location;
|
|
||||||
} GX2AttribVar;
|
|
||||||
|
|
||||||
|
|
||||||
typedef struct _GX2UniformBlock {
|
|
||||||
const char *name;
|
|
||||||
u32 location;
|
|
||||||
u32 block_size;
|
|
||||||
} GX2UniformBlock;
|
|
||||||
|
|
||||||
typedef struct _GX2UniformInitialValue {
|
|
||||||
f32 value[4];
|
|
||||||
u32 offset;
|
|
||||||
} GX2UniformInitialValue;
|
|
||||||
|
|
||||||
typedef struct _GX2SamplerVar
|
|
||||||
{
|
|
||||||
const char *name;
|
|
||||||
s32 sampler_type;
|
|
||||||
u32 location;
|
|
||||||
} GX2SamplerVar;
|
|
||||||
|
|
||||||
typedef struct _GX2UniformVar
|
|
||||||
{
|
|
||||||
const char *name;
|
|
||||||
s32 var_type;
|
|
||||||
u32 array_count;
|
|
||||||
u32 offset;
|
|
||||||
u32 block_index;
|
|
||||||
} GX2UniformVar;
|
|
||||||
|
|
||||||
typedef struct _GX2VertexShader {
|
|
||||||
u32 regs[52];
|
|
||||||
u32 shader_size;
|
|
||||||
void *shader_data;
|
|
||||||
s32 shader_mode;
|
|
||||||
u32 uniform_blocks_count;
|
|
||||||
GX2UniformBlock *uniform_block;
|
|
||||||
u32 uniform_vars_count;
|
|
||||||
GX2UniformVar *uniform_var;
|
|
||||||
u32 initial_values_count;
|
|
||||||
GX2UniformInitialValue *initial_value;
|
|
||||||
u32 loops_count;
|
|
||||||
void *loops_data;
|
|
||||||
u32 sampler_vars_count;
|
|
||||||
GX2SamplerVar *sampler_var;
|
|
||||||
u32 attribute_vars_count;
|
|
||||||
GX2AttribVar *attribute_var;
|
|
||||||
u32 data[6];
|
|
||||||
u32 shader_program_buffer[16];
|
|
||||||
} GX2VertexShader;
|
|
||||||
|
|
||||||
typedef struct _GX2PixelShader {
|
|
||||||
u32 regs[41];
|
|
||||||
u32 shader_size;
|
|
||||||
void *shader_data;
|
|
||||||
s32 shader_mode;
|
|
||||||
u32 uniform_blocks_count;
|
|
||||||
GX2UniformBlock *uniform_block;
|
|
||||||
u32 uniform_vars_count;
|
|
||||||
GX2UniformVar *uniform_var;
|
|
||||||
u32 initial_values_count;
|
|
||||||
GX2UniformInitialValue *initial_value;
|
|
||||||
u32 loops_count;
|
|
||||||
void *loops_data;
|
|
||||||
u32 sampler_vars_count;
|
|
||||||
GX2SamplerVar *sampler_var;
|
|
||||||
u32 shader_program_buffer[16];
|
|
||||||
} GX2PixelShader;
|
|
||||||
|
|
||||||
static const u32 attribute_dest_comp_selector[20] = {
|
|
||||||
GX2_COMP_SEL_X001, GX2_COMP_SEL_XY01, GX2_COMP_SEL_X001, GX2_COMP_SEL_X001, GX2_COMP_SEL_XY01, GX2_COMP_SEL_X001,
|
|
||||||
GX2_COMP_SEL_X001, GX2_COMP_SEL_XY01, GX2_COMP_SEL_XY01, GX2_COMP_SEL_XYZ1, GX2_COMP_SEL_XYZW, GX2_COMP_SEL_XYZW,
|
|
||||||
GX2_COMP_SEL_XY01, GX2_COMP_SEL_XY01, GX2_COMP_SEL_XYZW, GX2_COMP_SEL_XYZW, GX2_COMP_SEL_XYZ1, GX2_COMP_SEL_XYZ1,
|
|
||||||
GX2_COMP_SEL_XYZW, GX2_COMP_SEL_XYZW
|
|
||||||
};
|
|
||||||
|
|
||||||
static const u32 texture_comp_selector[54] = {
|
|
||||||
GX2_COMP_SEL_NONE, GX2_COMP_SEL_X001, GX2_COMP_SEL_XY01, GX2_COMP_SEL_NONE, GX2_COMP_SEL_NONE, GX2_COMP_SEL_X001,
|
|
||||||
GX2_COMP_SEL_X001, GX2_COMP_SEL_XY01, GX2_COMP_SEL_XYZ1, GX2_COMP_SEL_XYZ1, GX2_COMP_SEL_XYZW, GX2_COMP_SEL_XYZW,
|
|
||||||
GX2_COMP_SEL_WZYX, GX2_COMP_SEL_X001, GX2_COMP_SEL_X001, GX2_COMP_SEL_XY01, GX2_COMP_SEL_XY01, GX2_COMP_SEL_NONE,
|
|
||||||
GX2_COMP_SEL_NONE, GX2_COMP_SEL_NONE, GX2_COMP_SEL_NONE, GX2_COMP_SEL_NONE, GX2_COMP_SEL_XYZ1, GX2_COMP_SEL_NONE,
|
|
||||||
GX2_COMP_SEL_NONE, GX2_COMP_SEL_XYZW, GX2_COMP_SEL_XYZW, GX2_COMP_SEL_WZYX, GX2_COMP_SEL_XY01, GX2_COMP_SEL_XY01,
|
|
||||||
GX2_COMP_SEL_XY01, GX2_COMP_SEL_XYZW, GX2_COMP_SEL_XYZW, GX2_COMP_SEL_NONE, GX2_COMP_SEL_XYZW, GX2_COMP_SEL_XYZW,
|
|
||||||
GX2_COMP_SEL_NONE, GX2_COMP_SEL_NONE, GX2_COMP_SEL_NONE, GX2_COMP_SEL_XYZ1, GX2_COMP_SEL_XYZ1, GX2_COMP_SEL_X001,
|
|
||||||
GX2_COMP_SEL_XY01, GX2_COMP_SEL_XYZ1, GX2_COMP_SEL_NONE, GX2_COMP_SEL_NONE, GX2_COMP_SEL_NONE, GX2_COMP_SEL_XYZ1,
|
|
||||||
GX2_COMP_SEL_XYZ1, GX2_COMP_SEL_XYZW, GX2_COMP_SEL_XYZW, GX2_COMP_SEL_XYZW, GX2_COMP_SEL_X001, GX2_COMP_SEL_XY01
|
|
||||||
};
|
|
||||||
|
|
||||||
typedef struct _GX2Color {
|
|
||||||
u8 r, g, b, a;
|
|
||||||
} GX2Color;
|
|
||||||
|
|
||||||
typedef struct _GX2ColorF32 {
|
|
||||||
f32 r, g, b, a;
|
|
||||||
} GX2ColorF32;
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif
|
|
@ -1,326 +0,0 @@
|
|||||||
/****************************************************************************
|
|
||||||
* Copyright (C) 2015
|
|
||||||
* by Dimok
|
|
||||||
*
|
|
||||||
* This software is provided 'as-is', without any express or implied
|
|
||||||
* warranty. In no event will the authors be held liable for any
|
|
||||||
* damages arising from the use of this software.
|
|
||||||
*
|
|
||||||
* Permission is granted to anyone to use this software for any
|
|
||||||
* purpose, including commercial applications, and to alter it and
|
|
||||||
* redistribute it freely, subject to the following restrictions:
|
|
||||||
*
|
|
||||||
* 1. The origin of this software must not be misrepresented; you
|
|
||||||
* must not claim that you wrote the original software. If you use
|
|
||||||
* this software in a product, an acknowledgment in the product
|
|
||||||
* documentation would be appreciated but is not required.
|
|
||||||
*
|
|
||||||
* 2. Altered source versions must be plainly marked as such, and
|
|
||||||
* must not be misrepresented as being the original software.
|
|
||||||
*
|
|
||||||
* 3. This notice may not be removed or altered from any source
|
|
||||||
* distribution.
|
|
||||||
***************************************************************************/
|
|
||||||
#include "common/common.h"
|
|
||||||
#include "os_functions.h"
|
|
||||||
|
|
||||||
unsigned int coreinit_handle __attribute__((section(".data"))) = 0;
|
|
||||||
|
|
||||||
//!----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
|
||||||
//! Lib handle functions
|
|
||||||
//!----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
|
||||||
EXPORT_DECL(int, OSDynLoad_Acquire, const char* rpl, u32 *handle);
|
|
||||||
EXPORT_DECL(int, OSDynLoad_FindExport, u32 handle, int isdata, const char *symbol, void *address);
|
|
||||||
|
|
||||||
//!----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
|
||||||
//! Security functions
|
|
||||||
//!----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
|
||||||
EXPORT_DECL(int, OSGetSecurityLevel, void);
|
|
||||||
|
|
||||||
//!----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
|
||||||
//! Thread functions
|
|
||||||
//!----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
|
||||||
EXPORT_DECL(int, OSCreateThread, void *thread, s32 (*callback)(s32, void*), s32 argc, void *args, u32 stack, u32 stack_size, s32 priority, u32 attr);
|
|
||||||
EXPORT_DECL(int, OSResumeThread, void *thread);
|
|
||||||
EXPORT_DECL(int, OSSuspendThread, void *thread);
|
|
||||||
EXPORT_DECL(int, OSIsThreadTerminated, void *thread);
|
|
||||||
EXPORT_DECL(int, OSIsThreadSuspended, void *thread);
|
|
||||||
EXPORT_DECL(int, OSSetThreadPriority, void * thread, int priority);
|
|
||||||
EXPORT_DECL(int, OSJoinThread, void * thread, int * ret_val);
|
|
||||||
EXPORT_DECL(void, OSDetachThread, void * thread);
|
|
||||||
EXPORT_DECL(void, OSSleepTicks, u64 ticks);
|
|
||||||
EXPORT_DECL(u64, OSGetTick, void);
|
|
||||||
EXPORT_DECL(u64, OSGetTime, void);
|
|
||||||
EXPORT_DECL(void, OSTicksToCalendarTime, u64 time, OSCalendarTime * calendarTime);
|
|
||||||
|
|
||||||
|
|
||||||
//!----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
|
||||||
//! Mutex functions
|
|
||||||
//!----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
|
||||||
EXPORT_DECL(void, OSInitMutex, void* mutex);
|
|
||||||
EXPORT_DECL(void, OSLockMutex, void* mutex);
|
|
||||||
EXPORT_DECL(void, OSUnlockMutex, void* mutex);
|
|
||||||
EXPORT_DECL(int, OSTryLockMutex, void* mutex);
|
|
||||||
|
|
||||||
//!----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
|
||||||
//! System functions
|
|
||||||
//!----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
|
||||||
EXPORT_DECL(u64, OSGetTitleID, void);
|
|
||||||
EXPORT_DECL(void, OSGetArgcArgv, int* argc, char*** argv);
|
|
||||||
EXPORT_DECL(void, __Exit, void);
|
|
||||||
EXPORT_DECL(void, OSFatal, const char* msg);
|
|
||||||
EXPORT_DECL(void, OSSetExceptionCallback, u8 exceptionType, exception_callback newCallback);
|
|
||||||
EXPORT_DECL(void, DCFlushRange, const void *addr, u32 length);
|
|
||||||
EXPORT_DECL(void, ICInvalidateRange, const void *addr, u32 length);
|
|
||||||
EXPORT_DECL(void*, OSEffectiveToPhysical, const void*);
|
|
||||||
EXPORT_DECL(int, __os_snprintf, char* s, int n, const char * format, ...);
|
|
||||||
EXPORT_DECL(int *, __gh_errno_ptr, void);
|
|
||||||
|
|
||||||
EXPORT_DECL(void, OSScreenInit, void);
|
|
||||||
EXPORT_DECL(unsigned int, OSScreenGetBufferSizeEx, unsigned int bufferNum);
|
|
||||||
EXPORT_DECL(int, OSScreenSetBufferEx, unsigned int bufferNum, void * addr);
|
|
||||||
EXPORT_DECL(int, OSScreenClearBufferEx, unsigned int bufferNum, unsigned int temp);
|
|
||||||
EXPORT_DECL(int, OSScreenFlipBuffersEx, unsigned int bufferNum);
|
|
||||||
EXPORT_DECL(int, OSScreenPutFontEx, unsigned int bufferNum, unsigned int posX, unsigned int posY, const char * buffer);
|
|
||||||
EXPORT_DECL(int, OSScreenEnableEx, unsigned int bufferNum, int enable);
|
|
||||||
|
|
||||||
//!----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
|
||||||
//! Memory functions
|
|
||||||
//!----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
|
||||||
EXPORT_VAR(unsigned int *, pMEMAllocFromDefaultHeapEx);
|
|
||||||
EXPORT_VAR(unsigned int *, pMEMAllocFromDefaultHeap);
|
|
||||||
EXPORT_VAR(unsigned int *, pMEMFreeToDefaultHeap);
|
|
||||||
|
|
||||||
EXPORT_DECL(int, MEMGetBaseHeapHandle, int mem_arena);
|
|
||||||
EXPORT_DECL(unsigned int, MEMGetAllocatableSizeForFrmHeapEx, int heap, int align);
|
|
||||||
EXPORT_DECL(void *, MEMAllocFromFrmHeapEx, int heap, unsigned int size, int align);
|
|
||||||
EXPORT_DECL(void, MEMFreeToFrmHeap, int heap, int mode);
|
|
||||||
EXPORT_DECL(void *, MEMAllocFromExpHeapEx, int heap, unsigned int size, int align);
|
|
||||||
EXPORT_DECL(int , MEMCreateExpHeapEx, void* address, unsigned int size, unsigned short flags);
|
|
||||||
EXPORT_DECL(void *, MEMDestroyExpHeap, int heap);
|
|
||||||
EXPORT_DECL(void, MEMFreeToExpHeap, int heap, void* ptr);
|
|
||||||
|
|
||||||
//!----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
|
||||||
//! MCP functions
|
|
||||||
//!----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
|
||||||
EXPORT_DECL(int, MCP_Open, void);
|
|
||||||
EXPORT_DECL(int, MCP_Close, int handle);
|
|
||||||
EXPORT_DECL(int, MCP_GetOwnTitleInfo, int handle, void * data);
|
|
||||||
|
|
||||||
//!----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
|
||||||
//! Loader functions (not real rpl)
|
|
||||||
//!----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
|
||||||
EXPORT_DECL(int, LiWaitIopComplete, int unknown_syscall_arg_r3, int * remaining_bytes);
|
|
||||||
EXPORT_DECL(int, LiWaitIopCompleteWithInterrupts, int unknown_syscall_arg_r3, int * remaining_bytes);
|
|
||||||
EXPORT_DECL(void, addr_LiWaitOneChunk, void);
|
|
||||||
EXPORT_DECL(void, addr_sgIsLoadingBuffer, void);
|
|
||||||
EXPORT_DECL(void, addr_gDynloadInitialized, void);
|
|
||||||
|
|
||||||
//!----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
|
||||||
//! Kernel function addresses
|
|
||||||
//!----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
|
||||||
EXPORT_DECL(void, addr_PrepareTitle_hook, void);
|
|
||||||
|
|
||||||
//!----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
|
||||||
//! Other function addresses
|
|
||||||
//!----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
|
||||||
EXPORT_DECL(void, DCInvalidateRange, void *buffer, uint32_t length);
|
|
||||||
|
|
||||||
//!----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
|
||||||
//! Energy Saver functions
|
|
||||||
//!----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
|
||||||
//Burn-in Reduction
|
|
||||||
EXPORT_DECL(int, IMEnableDim,void);
|
|
||||||
EXPORT_DECL(int, IMDisableDim,void);
|
|
||||||
EXPORT_DECL(int, IMIsDimEnabled,int * result);
|
|
||||||
//Auto power down
|
|
||||||
EXPORT_DECL(int, IMEnableAPD,void);
|
|
||||||
EXPORT_DECL(int, IMDisableAPD,void);
|
|
||||||
EXPORT_DECL(int, IMIsAPDEnabled,int * result);
|
|
||||||
EXPORT_DECL(int, IMIsAPDEnabledBySysSettings,int * result);
|
|
||||||
|
|
||||||
void InitAcquireOS(void)
|
|
||||||
{
|
|
||||||
//!----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
|
||||||
//! Lib handle functions
|
|
||||||
//!----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
|
||||||
EXPORT_FUNC_WRITE(OSDynLoad_Acquire, (int (*)(const char*, unsigned *))OS_SPECIFICS->addr_OSDynLoad_Acquire);
|
|
||||||
EXPORT_FUNC_WRITE(OSDynLoad_FindExport, (int (*)(u32, int, const char *, void *))OS_SPECIFICS->addr_OSDynLoad_FindExport);
|
|
||||||
|
|
||||||
OSDynLoad_Acquire("coreinit.rpl", &coreinit_handle);
|
|
||||||
}
|
|
||||||
|
|
||||||
void InitOSFunctionPointers(void)
|
|
||||||
{
|
|
||||||
unsigned int *funcPointer = 0;
|
|
||||||
|
|
||||||
InitAcquireOS();
|
|
||||||
|
|
||||||
//!----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
|
||||||
//! Security functions
|
|
||||||
//!----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
|
||||||
OS_FIND_EXPORT(coreinit_handle, OSGetSecurityLevel);
|
|
||||||
//!----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
|
||||||
//! System functions
|
|
||||||
//!----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
|
||||||
OS_FIND_EXPORT(coreinit_handle, OSFatal);
|
|
||||||
OS_FIND_EXPORT(coreinit_handle, OSGetTitleID);
|
|
||||||
OS_FIND_EXPORT(coreinit_handle, OSGetArgcArgv);
|
|
||||||
OS_FIND_EXPORT(coreinit_handle, OSSetExceptionCallback);
|
|
||||||
OS_FIND_EXPORT(coreinit_handle, DCFlushRange);
|
|
||||||
OS_FIND_EXPORT(coreinit_handle, ICInvalidateRange);
|
|
||||||
OS_FIND_EXPORT(coreinit_handle, OSEffectiveToPhysical);
|
|
||||||
OS_FIND_EXPORT(coreinit_handle, __os_snprintf);
|
|
||||||
OS_FIND_EXPORT(coreinit_handle, __gh_errno_ptr);
|
|
||||||
|
|
||||||
OSDynLoad_FindExport(coreinit_handle, 0, "_Exit", &__Exit);
|
|
||||||
|
|
||||||
OS_FIND_EXPORT(coreinit_handle, OSScreenInit);
|
|
||||||
OS_FIND_EXPORT(coreinit_handle, OSScreenGetBufferSizeEx);
|
|
||||||
OS_FIND_EXPORT(coreinit_handle, OSScreenSetBufferEx);
|
|
||||||
OS_FIND_EXPORT(coreinit_handle, OSScreenClearBufferEx);
|
|
||||||
OS_FIND_EXPORT(coreinit_handle, OSScreenFlipBuffersEx);
|
|
||||||
OS_FIND_EXPORT(coreinit_handle, OSScreenPutFontEx);
|
|
||||||
OS_FIND_EXPORT(coreinit_handle, OSScreenEnableEx);
|
|
||||||
//!----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
|
||||||
//! Thread functions
|
|
||||||
//!----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
|
||||||
OS_FIND_EXPORT(coreinit_handle, OSCreateThread);
|
|
||||||
OS_FIND_EXPORT(coreinit_handle, OSResumeThread);
|
|
||||||
OS_FIND_EXPORT(coreinit_handle, OSSuspendThread);
|
|
||||||
OS_FIND_EXPORT(coreinit_handle, OSIsThreadTerminated);
|
|
||||||
OS_FIND_EXPORT(coreinit_handle, OSIsThreadSuspended);
|
|
||||||
OS_FIND_EXPORT(coreinit_handle, OSJoinThread);
|
|
||||||
OS_FIND_EXPORT(coreinit_handle, OSSetThreadPriority);
|
|
||||||
OS_FIND_EXPORT(coreinit_handle, OSDetachThread);
|
|
||||||
OS_FIND_EXPORT(coreinit_handle, OSSleepTicks);
|
|
||||||
OS_FIND_EXPORT(coreinit_handle, OSGetTick);
|
|
||||||
OS_FIND_EXPORT(coreinit_handle, OSGetTime);
|
|
||||||
OS_FIND_EXPORT(coreinit_handle, OSTicksToCalendarTime);
|
|
||||||
|
|
||||||
//!----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
|
||||||
//! Mutex functions
|
|
||||||
//!----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
|
||||||
OS_FIND_EXPORT(coreinit_handle, OSInitMutex);
|
|
||||||
OS_FIND_EXPORT(coreinit_handle, OSLockMutex);
|
|
||||||
OS_FIND_EXPORT(coreinit_handle, OSUnlockMutex);
|
|
||||||
OS_FIND_EXPORT(coreinit_handle, OSTryLockMutex);
|
|
||||||
//!----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
|
||||||
//! MCP functions
|
|
||||||
//!----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
|
||||||
OS_FIND_EXPORT(coreinit_handle, MCP_Open);
|
|
||||||
OS_FIND_EXPORT(coreinit_handle, MCP_Close);
|
|
||||||
OS_FIND_EXPORT(coreinit_handle, MCP_GetOwnTitleInfo);
|
|
||||||
|
|
||||||
//!----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
|
||||||
//! Memory functions
|
|
||||||
//!----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
|
||||||
OSDynLoad_FindExport(coreinit_handle, 1, "MEMAllocFromDefaultHeapEx", &pMEMAllocFromDefaultHeapEx);
|
|
||||||
OSDynLoad_FindExport(coreinit_handle, 1, "MEMAllocFromDefaultHeap", &pMEMAllocFromDefaultHeap);
|
|
||||||
OSDynLoad_FindExport(coreinit_handle, 1, "MEMFreeToDefaultHeap", &pMEMFreeToDefaultHeap);
|
|
||||||
|
|
||||||
OS_FIND_EXPORT(coreinit_handle, MEMGetBaseHeapHandle);
|
|
||||||
OS_FIND_EXPORT(coreinit_handle, MEMGetAllocatableSizeForFrmHeapEx);
|
|
||||||
OS_FIND_EXPORT(coreinit_handle, MEMAllocFromFrmHeapEx);
|
|
||||||
OS_FIND_EXPORT(coreinit_handle, MEMFreeToFrmHeap);
|
|
||||||
OS_FIND_EXPORT(coreinit_handle, MEMAllocFromExpHeapEx);
|
|
||||||
OS_FIND_EXPORT(coreinit_handle, MEMCreateExpHeapEx);
|
|
||||||
OS_FIND_EXPORT(coreinit_handle, MEMDestroyExpHeap);
|
|
||||||
OS_FIND_EXPORT(coreinit_handle, MEMFreeToExpHeap);
|
|
||||||
|
|
||||||
//!----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
|
||||||
//! Other function addresses
|
|
||||||
//!----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
|
||||||
OS_FIND_EXPORT(coreinit_handle, DCInvalidateRange);
|
|
||||||
|
|
||||||
//!----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
|
||||||
//! Energy Saver functions
|
|
||||||
//!----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
|
||||||
//Burn-in Reduction
|
|
||||||
OS_FIND_EXPORT(coreinit_handle, IMEnableDim);
|
|
||||||
OS_FIND_EXPORT(coreinit_handle, IMDisableDim);
|
|
||||||
OS_FIND_EXPORT(coreinit_handle, IMIsDimEnabled);
|
|
||||||
//Auto power down
|
|
||||||
OS_FIND_EXPORT(coreinit_handle, IMEnableAPD);
|
|
||||||
OS_FIND_EXPORT(coreinit_handle, IMDisableAPD);
|
|
||||||
OS_FIND_EXPORT(coreinit_handle, IMIsAPDEnabled);
|
|
||||||
OS_FIND_EXPORT(coreinit_handle, IMIsAPDEnabledBySysSettings);
|
|
||||||
|
|
||||||
//!----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
|
||||||
//! Special non library functions
|
|
||||||
//!----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
|
||||||
if(OS_FIRMWARE == 532 || OS_FIRMWARE == 540)
|
|
||||||
{
|
|
||||||
EXPORT_FUNC_WRITE(LiWaitIopComplete, (int (*)(int, int *))0x0100FFA4); // loader.elf
|
|
||||||
EXPORT_FUNC_WRITE(LiWaitIopCompleteWithInterrupts, (int (*)(int, int *))0x0100FE90); // loader.elf
|
|
||||||
EXPORT_FUNC_WRITE(addr_LiWaitOneChunk, (int (*)(int, int *))0x010007EC); // loader.elf
|
|
||||||
EXPORT_FUNC_WRITE(addr_PrepareTitle_hook, (int (*)(int, int *))0xFFF18558); // kernel.elf
|
|
||||||
|
|
||||||
EXPORT_FUNC_WRITE(addr_sgIsLoadingBuffer, (int (*)(int, int *))0xEFE19D00); // loader.elf
|
|
||||||
EXPORT_FUNC_WRITE(addr_gDynloadInitialized, (int (*)(int, int *))0xEFE13C3C); // loader.elf
|
|
||||||
}
|
|
||||||
else if(OS_FIRMWARE == 500 || OS_FIRMWARE == 510)
|
|
||||||
{
|
|
||||||
EXPORT_FUNC_WRITE(LiWaitIopComplete, (int (*)(int, int *))0x0100FBC4);
|
|
||||||
EXPORT_FUNC_WRITE(LiWaitIopCompleteWithInterrupts, (int (*)(int, int *))0x0100FAB0);
|
|
||||||
EXPORT_FUNC_WRITE(addr_LiWaitOneChunk, (int (*)(int, int *))0x010007EC);
|
|
||||||
EXPORT_FUNC_WRITE(addr_PrepareTitle_hook, (int (*)(int, int *))0xFFF18534);
|
|
||||||
|
|
||||||
EXPORT_FUNC_WRITE(addr_sgIsLoadingBuffer, (int (*)(int, int *))0xEFE19D00);
|
|
||||||
EXPORT_FUNC_WRITE(addr_gDynloadInitialized, (int (*)(int, int *))0xEFE13C3C);
|
|
||||||
}
|
|
||||||
else if(OS_FIRMWARE == 410)
|
|
||||||
{
|
|
||||||
EXPORT_FUNC_WRITE(LiWaitIopComplete, (int (*)(int, int *))0x0100F78C);
|
|
||||||
EXPORT_FUNC_WRITE(LiWaitIopCompleteWithInterrupts, (int (*)(int, int *))0x0100F678);
|
|
||||||
EXPORT_FUNC_WRITE(addr_LiWaitOneChunk, (int (*)(int, int *))0x010007F8);
|
|
||||||
EXPORT_FUNC_WRITE(addr_PrepareTitle_hook, (int (*)(int, int *))0xFFF166DC);
|
|
||||||
|
|
||||||
EXPORT_FUNC_WRITE(addr_sgIsLoadingBuffer, (int (*)(int, int *))0xEFE19CC0);
|
|
||||||
EXPORT_FUNC_WRITE(addr_gDynloadInitialized, (int (*)(int, int *))0xEFE13BFC);
|
|
||||||
}
|
|
||||||
else if(OS_FIRMWARE == 400) //same for 402 and 403
|
|
||||||
{
|
|
||||||
EXPORT_FUNC_WRITE(LiWaitIopComplete, (int (*)(int, int *))0x0100F78C);
|
|
||||||
EXPORT_FUNC_WRITE(LiWaitIopCompleteWithInterrupts, (int (*)(int, int *))0x0100F678);
|
|
||||||
EXPORT_FUNC_WRITE(addr_LiWaitOneChunk, (int (*)(int, int *))0x010007F8);
|
|
||||||
EXPORT_FUNC_WRITE(addr_PrepareTitle_hook, (int (*)(int, int *))0xFFF15E70);
|
|
||||||
|
|
||||||
EXPORT_FUNC_WRITE(addr_sgIsLoadingBuffer, (int (*)(int, int *))0xEFE19CC0);
|
|
||||||
EXPORT_FUNC_WRITE(addr_gDynloadInitialized, (int (*)(int, int *))0xEFE13BFC);
|
|
||||||
}
|
|
||||||
else if(OS_FIRMWARE == 550)
|
|
||||||
{
|
|
||||||
EXPORT_FUNC_WRITE(LiWaitIopComplete, (int (*)(int, int *))0x01010180);
|
|
||||||
EXPORT_FUNC_WRITE(LiWaitIopCompleteWithInterrupts, (int (*)(int, int *))0x0101006C);
|
|
||||||
EXPORT_FUNC_WRITE(addr_LiWaitOneChunk, (int (*)(int, int *))0x0100080C);
|
|
||||||
EXPORT_FUNC_WRITE(addr_PrepareTitle_hook, (int (*)(int, int *))0xFFF184E4);
|
|
||||||
|
|
||||||
EXPORT_FUNC_WRITE(addr_sgIsLoadingBuffer, (int (*)(int, int *))0xEFE19E80);
|
|
||||||
EXPORT_FUNC_WRITE(addr_gDynloadInitialized, (int (*)(int, int *))0xEFE13DBC);
|
|
||||||
}
|
|
||||||
else if(OS_FIRMWARE == 310)
|
|
||||||
{
|
|
||||||
EXPORT_FUNC_WRITE(LiWaitIopComplete, (int (*)(int, int *))0x0100C4E4);
|
|
||||||
EXPORT_FUNC_WRITE(LiWaitIopCompleteWithInterrupts, (int (*)(int, int *))0x0100C3D4);
|
|
||||||
EXPORT_FUNC_WRITE(addr_LiWaitOneChunk, (int (*)(int, int *))0x010004D8);
|
|
||||||
EXPORT_FUNC_WRITE(addr_PrepareTitle_hook, (int (*)(int, int *))0xFFF15A0C);
|
|
||||||
|
|
||||||
EXPORT_FUNC_WRITE(addr_sgIsLoadingBuffer, (int (*)(int, int *))0xEFE19340);
|
|
||||||
EXPORT_FUNC_WRITE(addr_gDynloadInitialized, (int (*)(int, int *))0xEFE1329C);
|
|
||||||
}
|
|
||||||
else if(OS_FIRMWARE == 300)
|
|
||||||
{
|
|
||||||
EXPORT_FUNC_WRITE(LiWaitIopComplete, (int (*)(int, int *))0x0100C4E4);
|
|
||||||
EXPORT_FUNC_WRITE(LiWaitIopCompleteWithInterrupts, (int (*)(int, int *))0x0100C3D4);
|
|
||||||
EXPORT_FUNC_WRITE(addr_LiWaitOneChunk, (int (*)(int, int *))0x010004D8);
|
|
||||||
EXPORT_FUNC_WRITE(addr_PrepareTitle_hook, (int (*)(int, int *))0xFFF15974);
|
|
||||||
|
|
||||||
EXPORT_FUNC_WRITE(addr_sgIsLoadingBuffer, (int (*)(int, int *))0xEFE19340);
|
|
||||||
EXPORT_FUNC_WRITE(addr_gDynloadInitialized, (int (*)(int, int *))0xEFE1329C);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
OSFatal("Missing all OS specific addresses.");
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,174 +0,0 @@
|
|||||||
/****************************************************************************
|
|
||||||
* Copyright (C) 2015
|
|
||||||
* by Dimok
|
|
||||||
*
|
|
||||||
* This software is provided 'as-is', without any express or implied
|
|
||||||
* warranty. In no event will the authors be held liable for any
|
|
||||||
* damages arising from the use of this software.
|
|
||||||
*
|
|
||||||
* Permission is granted to anyone to use this software for any
|
|
||||||
* purpose, including commercial applications, and to alter it and
|
|
||||||
* redistribute it freely, subject to the following restrictions:
|
|
||||||
*
|
|
||||||
* 1. The origin of this software must not be misrepresented; you
|
|
||||||
* must not claim that you wrote the original software. If you use
|
|
||||||
* this software in a product, an acknowledgment in the product
|
|
||||||
* documentation would be appreciated but is not required.
|
|
||||||
*
|
|
||||||
* 2. Altered source versions must be plainly marked as such, and
|
|
||||||
* must not be misrepresented as being the original software.
|
|
||||||
*
|
|
||||||
* 3. This notice may not be removed or altered from any source
|
|
||||||
* distribution.
|
|
||||||
***************************************************************************/
|
|
||||||
#ifndef __OS_FUNCTIONS_H_
|
|
||||||
#define __OS_FUNCTIONS_H_
|
|
||||||
|
|
||||||
#include <gctypes.h>
|
|
||||||
#include "common/os_defs.h"
|
|
||||||
#include "os_types.h"
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
extern "C" {
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define BUS_SPEED 248625000
|
|
||||||
#define SECS_TO_TICKS(sec) (((unsigned long long)(sec)) * (BUS_SPEED/4))
|
|
||||||
#define MILLISECS_TO_TICKS(msec) (SECS_TO_TICKS(msec) / 1000)
|
|
||||||
#define MICROSECS_TO_TICKS(usec) (SECS_TO_TICKS(usec) / 1000000)
|
|
||||||
|
|
||||||
#define usleep(usecs) OSSleepTicks(MICROSECS_TO_TICKS(usecs))
|
|
||||||
#define sleep(secs) OSSleepTicks(SECS_TO_TICKS(secs))
|
|
||||||
|
|
||||||
#define FLUSH_DATA_BLOCK(addr) asm volatile("dcbf 0, %0; sync" : : "r"(((addr) & ~31)))
|
|
||||||
#define INVAL_DATA_BLOCK(addr) asm volatile("dcbi 0, %0; sync" : : "r"(((addr) & ~31)))
|
|
||||||
|
|
||||||
#define EXPORT_DECL(res, func, ...) res (* func)(__VA_ARGS__) __attribute__((section(".data"))) = 0;
|
|
||||||
#define EXPORT_VAR(type, var) type var __attribute__((section(".data")));
|
|
||||||
|
|
||||||
|
|
||||||
#define EXPORT_FUNC_WRITE(func, val) *(u32*)(((u32)&func) + 0) = (u32)val
|
|
||||||
|
|
||||||
#define OS_FIND_EXPORT(handle, func) funcPointer = 0; \
|
|
||||||
OSDynLoad_FindExport(handle, 0, # func, &funcPointer); \
|
|
||||||
if(!funcPointer) \
|
|
||||||
OSFatal("Function " # func " is NULL"); \
|
|
||||||
EXPORT_FUNC_WRITE(func, funcPointer);
|
|
||||||
|
|
||||||
#define OS_FIND_EXPORT_EX(handle, func, func_p) \
|
|
||||||
funcPointer = 0; \
|
|
||||||
OSDynLoad_FindExport(handle, 0, # func, &funcPointer); \
|
|
||||||
if(!funcPointer) \
|
|
||||||
OSFatal("Function " # func " is NULL"); \
|
|
||||||
EXPORT_FUNC_WRITE(func_p, funcPointer);
|
|
||||||
|
|
||||||
#define OS_MUTEX_SIZE 44
|
|
||||||
|
|
||||||
/* Handle for coreinit */
|
|
||||||
extern unsigned int coreinit_handle;
|
|
||||||
void InitOSFunctionPointers(void);
|
|
||||||
void InitAcquireOS(void);
|
|
||||||
|
|
||||||
//!----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
|
||||||
//! Lib handle functions
|
|
||||||
//!----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
|
||||||
extern int (* OSDynLoad_Acquire)(const char* rpl, u32 *handle);
|
|
||||||
extern int (* OSDynLoad_FindExport)(u32 handle, int isdata, const char *symbol, void *address);
|
|
||||||
|
|
||||||
//!----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
|
||||||
//! Security functions
|
|
||||||
//!----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
|
||||||
extern int (* OSGetSecurityLevel)(void);
|
|
||||||
|
|
||||||
//!----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
|
||||||
//! Thread functions
|
|
||||||
//!----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
|
||||||
extern int (* OSCreateThread)(void *thread, s32 (*callback)(s32, void*), s32 argc, void *args, u32 stack, u32 stack_size, s32 priority, u32 attr);
|
|
||||||
extern int (* OSResumeThread)(void *thread);
|
|
||||||
extern int (* OSSuspendThread)(void *thread);
|
|
||||||
extern int (* OSIsThreadTerminated)(void *thread);
|
|
||||||
extern int (* OSIsThreadSuspended)(void *thread);
|
|
||||||
extern int (* OSJoinThread)(void * thread, int * ret_val);
|
|
||||||
extern int (* OSSetThreadPriority)(void * thread, int priority);
|
|
||||||
extern void (* OSDetachThread)(void * thread);
|
|
||||||
extern void (* OSSleepTicks)(u64 ticks);
|
|
||||||
extern u64 (* OSGetTick)(void);
|
|
||||||
extern u64 (* OSGetTime)(void);
|
|
||||||
extern void (*OSTicksToCalendarTime)(u64 time, OSCalendarTime *calendarTime);
|
|
||||||
|
|
||||||
//!----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
|
||||||
//! Mutex functions
|
|
||||||
//!----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
|
||||||
extern void (* OSInitMutex)(void* mutex);
|
|
||||||
extern void (* OSLockMutex)(void* mutex);
|
|
||||||
extern void (* OSUnlockMutex)(void* mutex);
|
|
||||||
extern int (* OSTryLockMutex)(void* mutex);
|
|
||||||
|
|
||||||
//!----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
|
||||||
//! System functions
|
|
||||||
//!----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
|
||||||
extern u64 (* OSGetTitleID)(void);
|
|
||||||
extern void (* OSGetArgcArgv)(int* argc, char*** argv);
|
|
||||||
extern void (* __Exit)(void);
|
|
||||||
extern void (* OSFatal)(const char* msg);
|
|
||||||
extern void (* DCFlushRange)(const void *addr, u32 length);
|
|
||||||
extern void (* ICInvalidateRange)(const void *addr, u32 length);
|
|
||||||
extern void* (* OSEffectiveToPhysical)(const void*);
|
|
||||||
extern int (* __os_snprintf)(char* s, int n, const char * format, ...);
|
|
||||||
extern int * (* __gh_errno_ptr)(void);
|
|
||||||
|
|
||||||
extern void (*OSScreenInit)(void);
|
|
||||||
extern unsigned int (*OSScreenGetBufferSizeEx)(unsigned int bufferNum);
|
|
||||||
extern int (*OSScreenSetBufferEx)(unsigned int bufferNum, void * addr);
|
|
||||||
extern int (*OSScreenClearBufferEx)(unsigned int bufferNum, unsigned int temp);
|
|
||||||
extern int (*OSScreenFlipBuffersEx)(unsigned int bufferNum);
|
|
||||||
extern int (*OSScreenPutFontEx)(unsigned int bufferNum, unsigned int posX, unsigned int posY, const char * buffer);
|
|
||||||
extern int (*OSScreenEnableEx)(unsigned int bufferNum, int enable);
|
|
||||||
|
|
||||||
typedef unsigned char (*exception_callback)(void * interruptedContext);
|
|
||||||
extern void (* OSSetExceptionCallback)(u8 exceptionType, exception_callback newCallback);
|
|
||||||
|
|
||||||
//!----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
|
||||||
//! MCP functions
|
|
||||||
//!----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
|
||||||
extern int (* MCP_Open)(void);
|
|
||||||
extern int (* MCP_Close)(int handle);
|
|
||||||
extern int (* MCP_GetOwnTitleInfo)(int handle, void * data);
|
|
||||||
|
|
||||||
//!----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
|
||||||
//! LOADER functions
|
|
||||||
//!----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
|
||||||
extern int (* LiWaitIopComplete)(int unknown_syscall_arg_r3, int * remaining_bytes);
|
|
||||||
extern int (* LiWaitIopCompleteWithInterrupts)(int unknown_syscall_arg_r3, int * remaining_bytes);
|
|
||||||
extern void (* addr_LiWaitOneChunk)(void);
|
|
||||||
extern void (* addr_sgIsLoadingBuffer)(void);
|
|
||||||
extern void (* addr_gDynloadInitialized)(void);
|
|
||||||
|
|
||||||
//!----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
|
||||||
//! Kernel function addresses
|
|
||||||
//!----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
|
||||||
extern void (* addr_PrepareTitle_hook)(void);
|
|
||||||
|
|
||||||
//!----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
|
||||||
//! Other function addresses
|
|
||||||
//!----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
|
||||||
extern void (*DCInvalidateRange)(void *buffer, uint32_t length);
|
|
||||||
|
|
||||||
//!----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
|
||||||
//! Energy Saver functions
|
|
||||||
//!----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
|
||||||
////Burn-in Reduction
|
|
||||||
extern int (*IMEnableDim)(void);
|
|
||||||
extern int (*IMDisableDim)(void);
|
|
||||||
extern int (*IMIsDimEnabled)(int * result);
|
|
||||||
//Auto power down
|
|
||||||
extern int (*IMEnableAPD)(void);
|
|
||||||
extern int (*IMDisableAPD)(void);
|
|
||||||
extern int (*IMIsAPDEnabled)(int * result);
|
|
||||||
extern int (*IMIsAPDEnabledBySysSettings)(int * result);
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif // __OS_FUNCTIONS_H_
|
|
@ -1,27 +0,0 @@
|
|||||||
#ifndef _OS_TYPES_H_
|
|
||||||
#define _OS_TYPES_H_
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
extern "C" {
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include <gctypes.h>
|
|
||||||
|
|
||||||
typedef struct _OSCalendarTime {
|
|
||||||
int sec;
|
|
||||||
int min;
|
|
||||||
int hour;
|
|
||||||
int mday;
|
|
||||||
int mon;
|
|
||||||
int year;
|
|
||||||
int wday;
|
|
||||||
int yday;
|
|
||||||
int msec;
|
|
||||||
int usec;
|
|
||||||
} OSCalendarTime;
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif
|
|
@ -21,41 +21,30 @@
|
|||||||
* 3. This notice may not be removed or altered from any source
|
* 3. This notice may not be removed or altered from any source
|
||||||
* distribution.
|
* distribution.
|
||||||
***************************************************************************/
|
***************************************************************************/
|
||||||
#include "os_functions.h"
|
#include "exports.h"
|
||||||
#include "padscore_functions.h"
|
#include "padscore_functions.h"
|
||||||
|
|
||||||
unsigned int padscore_handle __attribute__((section(".data"))) = 0;
|
|
||||||
|
|
||||||
EXPORT_DECL(void, KPADInit, void);
|
EXPORT_DECL(void, KPADInit, void);
|
||||||
EXPORT_DECL(void, WPADInit, void);
|
|
||||||
EXPORT_DECL(s32, WPADProbe, s32 chan, u32 * pad_type);
|
EXPORT_DECL(s32, WPADProbe, s32 chan, u32 * pad_type);
|
||||||
EXPORT_DECL(s32, WPADSetDataFormat, s32 chan, s32 format);
|
EXPORT_DECL(s32, WPADSetDataFormat, s32 chan, s32 format);
|
||||||
EXPORT_DECL(void, WPADEnableURCC, s32 enable);
|
EXPORT_DECL(void, WPADEnableURCC, s32 enable);
|
||||||
EXPORT_DECL(void, WPADRead, s32 chan, void * data);
|
EXPORT_DECL(void, WPADRead, s32 chan, void * data);
|
||||||
EXPORT_DECL(s32, KPADRead, s32 chan, void * data, u32 size);
|
EXPORT_DECL(s32, KPADRead, s32 chan, void * data, u32 size);
|
||||||
EXPORT_DECL(void,WPADSetAutoSleepTime,u8 minute);
|
|
||||||
EXPORT_DECL(void,WPADDisconnect,s32 chan);
|
|
||||||
|
|
||||||
void InitAcquirePadScore(void)
|
|
||||||
{
|
|
||||||
OSDynLoad_Acquire("padscore.rpl", &padscore_handle);
|
|
||||||
}
|
|
||||||
|
|
||||||
void InitPadScoreFunctionPointers(void)
|
void InitPadScoreFunctionPointers(void)
|
||||||
{
|
{
|
||||||
unsigned int *funcPointer = 0;
|
unsigned int *funcPointer = 0;
|
||||||
InitAcquirePadScore();
|
OSDynLoadModule padscore_handle;
|
||||||
|
OSDynLoad_Acquire("padscore.rpl", &padscore_handle);
|
||||||
|
|
||||||
OS_FIND_EXPORT(padscore_handle, WPADInit);
|
|
||||||
OS_FIND_EXPORT(padscore_handle, KPADInit);
|
OS_FIND_EXPORT(padscore_handle, KPADInit);
|
||||||
OS_FIND_EXPORT(padscore_handle, WPADProbe);
|
OS_FIND_EXPORT(padscore_handle, WPADProbe);
|
||||||
OS_FIND_EXPORT(padscore_handle, WPADSetDataFormat);
|
OS_FIND_EXPORT(padscore_handle, WPADSetDataFormat);
|
||||||
OS_FIND_EXPORT(padscore_handle, WPADEnableURCC);
|
OS_FIND_EXPORT(padscore_handle, WPADEnableURCC);
|
||||||
OS_FIND_EXPORT(padscore_handle, WPADRead);
|
OS_FIND_EXPORT(padscore_handle, WPADRead);
|
||||||
OS_FIND_EXPORT(padscore_handle, KPADRead);
|
OS_FIND_EXPORT(padscore_handle, KPADRead);
|
||||||
OS_FIND_EXPORT(padscore_handle, WPADSetAutoSleepTime);
|
|
||||||
OS_FIND_EXPORT(padscore_handle, WPADDisconnect);
|
|
||||||
|
|
||||||
KPADInit();
|
KPADInit();
|
||||||
WPADEnableURCC(1);
|
WPADEnableURCC(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -28,11 +28,7 @@
|
|||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "dynamic_libs/vpad_functions.h"
|
#include "common/types.h"
|
||||||
|
|
||||||
extern unsigned int padscore_handle;
|
|
||||||
|
|
||||||
#include <gctypes.h>
|
|
||||||
|
|
||||||
#define WPAD_BUTTON_LEFT 0x0001
|
#define WPAD_BUTTON_LEFT 0x0001
|
||||||
#define WPAD_BUTTON_RIGHT 0x0002
|
#define WPAD_BUTTON_RIGHT 0x0002
|
||||||
@ -64,34 +60,8 @@ extern unsigned int padscore_handle;
|
|||||||
#define WPAD_CLASSIC_BUTTON_DOWN 0x4000
|
#define WPAD_CLASSIC_BUTTON_DOWN 0x4000
|
||||||
#define WPAD_CLASSIC_BUTTON_RIGHT 0x8000
|
#define WPAD_CLASSIC_BUTTON_RIGHT 0x8000
|
||||||
|
|
||||||
#define WPAD_PRO_BUTTON_UP 0x00000001
|
void InitPadScoreFunctionPointers(void);
|
||||||
#define WPAD_PRO_BUTTON_LEFT 0x00000002
|
|
||||||
#define WPAD_PRO_TRIGGER_ZR 0x00000004
|
|
||||||
#define WPAD_PRO_BUTTON_X 0x00000008
|
|
||||||
#define WPAD_PRO_BUTTON_A 0x00000010
|
|
||||||
#define WPAD_PRO_BUTTON_Y 0x00000020
|
|
||||||
#define WPAD_PRO_BUTTON_B 0x00000040
|
|
||||||
#define WPAD_PRO_TRIGGER_ZL 0x00000080
|
|
||||||
#define WPAD_PRO_RESERVED 0x00000100
|
|
||||||
#define WPAD_PRO_TRIGGER_R 0x00000200
|
|
||||||
#define WPAD_PRO_BUTTON_PLUS 0x00000400
|
|
||||||
#define WPAD_PRO_BUTTON_HOME 0x00000800
|
|
||||||
#define WPAD_PRO_BUTTON_MINUS 0x00001000
|
|
||||||
#define WPAD_PRO_TRIGGER_L 0x00002000
|
|
||||||
#define WPAD_PRO_BUTTON_DOWN 0x00004000
|
|
||||||
#define WPAD_PRO_BUTTON_RIGHT 0x00008000
|
|
||||||
#define WPAD_PRO_BUTTON_STICK_R 0x00010000
|
|
||||||
#define WPAD_PRO_BUTTON_STICK_L 0x00020000
|
|
||||||
|
|
||||||
#define WPAD_PRO_STICK_L_EMULATION_UP 0x00200000
|
|
||||||
#define WPAD_PRO_STICK_L_EMULATION_DOWN 0x00100000
|
|
||||||
#define WPAD_PRO_STICK_L_EMULATION_LEFT 0x00040000
|
|
||||||
#define WPAD_PRO_STICK_L_EMULATION_RIGHT 0x00080000
|
|
||||||
|
|
||||||
#define WPAD_PRO_STICK_R_EMULATION_UP 0x02000000
|
|
||||||
#define WPAD_PRO_STICK_R_EMULATION_DOWN 0x01000000
|
|
||||||
#define WPAD_PRO_STICK_R_EMULATION_LEFT 0x00400000
|
|
||||||
#define WPAD_PRO_STICK_R_EMULATION_RIGHT 0x00800000
|
|
||||||
|
|
||||||
typedef struct _KPADData
|
typedef struct _KPADData
|
||||||
{
|
{
|
||||||
@ -108,7 +78,7 @@ typedef struct _KPADData
|
|||||||
u8 device_type;
|
u8 device_type;
|
||||||
u8 wpad_error;
|
u8 wpad_error;
|
||||||
u8 pos_valid;
|
u8 pos_valid;
|
||||||
u8 format;
|
u8 unused_4[1];
|
||||||
|
|
||||||
union
|
union
|
||||||
{
|
{
|
||||||
@ -131,38 +101,19 @@ typedef struct _KPADData
|
|||||||
f32 rtrigger;
|
f32 rtrigger;
|
||||||
} classic;
|
} classic;
|
||||||
|
|
||||||
struct
|
|
||||||
{
|
|
||||||
u32 btns_h;
|
|
||||||
u32 btns_d;
|
|
||||||
u32 btns_r;
|
|
||||||
f32 lstick_x;
|
|
||||||
f32 lstick_y;
|
|
||||||
f32 rstick_x;
|
|
||||||
f32 rstick_y;
|
|
||||||
int charging;
|
|
||||||
int wired;
|
|
||||||
} pro;
|
|
||||||
|
|
||||||
u32 unused_6[20];
|
u32 unused_6[20];
|
||||||
};
|
};
|
||||||
u32 unused_7[16];
|
u32 unused_7[16];
|
||||||
} KPADData;
|
} KPADData;
|
||||||
void InitPadScoreFunctionPointers(void);
|
|
||||||
void InitAcquirePadScore(void);
|
|
||||||
|
|
||||||
typedef void (* wpad_connect_callback_t)(s32 chan, s32 status);
|
typedef void (* wpad_connect_callback_t)(s32 chan, s32 status);
|
||||||
|
|
||||||
extern void (* KPADInit)(void);
|
extern void (* KPADInit)(void);
|
||||||
extern void (* WPADInit)(void);
|
|
||||||
extern s32 (* WPADProbe)(s32 chan, u32 * pad_type);
|
extern s32 (* WPADProbe)(s32 chan, u32 * pad_type);
|
||||||
extern s32 (* WPADSetDataFormat)(s32 chan, s32 format);
|
extern s32 (* WPADSetDataFormat)(s32 chan, s32 format);
|
||||||
extern void (* WPADEnableURCC)(s32 enable);
|
extern void (* WPADEnableURCC)(s32 enable);
|
||||||
extern void (* WPADRead)(s32 chan, void * data);
|
extern void (* WPADRead)(s32 chan, void * data);
|
||||||
extern s32 (* KPADRead)(s32 chan, void * data, u32 size);
|
extern s32 (* KPADRead)(s32 chan, void * data, u32 size);
|
||||||
extern s32 (* KPADReadEx)(s32 chan, KPADData * data, u32 size, s32 *error);
|
|
||||||
extern void (*WPADSetAutoSleepTime)(u8 time);
|
|
||||||
extern void (*WPADDisconnect)( s32 chan );
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
|
@ -1,81 +0,0 @@
|
|||||||
/****************************************************************************
|
|
||||||
* Copyright (C) 2015
|
|
||||||
* by Dimok
|
|
||||||
*
|
|
||||||
* This software is provided 'as-is', without any express or implied
|
|
||||||
* warranty. In no event will the authors be held liable for any
|
|
||||||
* damages arising from the use of this software.
|
|
||||||
*
|
|
||||||
* Permission is granted to anyone to use this software for any
|
|
||||||
* purpose, including commercial applications, and to alter it and
|
|
||||||
* redistribute it freely, subject to the following restrictions:
|
|
||||||
*
|
|
||||||
* 1. The origin of this software must not be misrepresented; you
|
|
||||||
* must not claim that you wrote the original software. If you use
|
|
||||||
* this software in a product, an acknowledgment in the product
|
|
||||||
* documentation would be appreciated but is not required.
|
|
||||||
*
|
|
||||||
* 2. Altered source versions must be plainly marked as such, and
|
|
||||||
* must not be misrepresented as being the original software.
|
|
||||||
*
|
|
||||||
* 3. This notice may not be removed or altered from any source
|
|
||||||
* distribution.
|
|
||||||
***************************************************************************/
|
|
||||||
#include "os_functions.h"
|
|
||||||
#include "socket_functions.h"
|
|
||||||
|
|
||||||
u32 hostIpAddress = 0;
|
|
||||||
|
|
||||||
unsigned int nsysnet_handle __attribute__((section(".data"))) = 0;
|
|
||||||
|
|
||||||
EXPORT_DECL(void, socket_lib_init, void);
|
|
||||||
EXPORT_DECL(int, socket, int domain, int type, int protocol);
|
|
||||||
EXPORT_DECL(int, socketclose, int s);
|
|
||||||
EXPORT_DECL(int, connect, int s, void *addr, int addrlen);
|
|
||||||
EXPORT_DECL(int, bind, s32 s,struct sockaddr *name,s32 namelen);
|
|
||||||
EXPORT_DECL(int, listen, s32 s,u32 backlog);
|
|
||||||
EXPORT_DECL(int, accept, s32 s,struct sockaddr *addr,s32 *addrlen);
|
|
||||||
EXPORT_DECL(int, send, int s, const void *buffer, int size, int flags);
|
|
||||||
EXPORT_DECL(int, recv, int s, void *buffer, int size, int flags);
|
|
||||||
EXPORT_DECL(int, recvfrom,int sockfd, void *buf, int len, int flags,struct sockaddr *src_addr, int *addrlen);
|
|
||||||
EXPORT_DECL(int, sendto, int s, const void *buffer, int size, int flags, const struct sockaddr *dest, int dest_len);
|
|
||||||
EXPORT_DECL(int, setsockopt, int s, int level, int optname, void *optval, int optlen);
|
|
||||||
EXPORT_DECL(char *, inet_ntoa, struct in_addr in);
|
|
||||||
EXPORT_DECL(int, inet_aton, const char *cp, struct in_addr *inp);
|
|
||||||
|
|
||||||
EXPORT_DECL(int, NSSLWrite, int connection, const void* buf, int len,int * written);
|
|
||||||
EXPORT_DECL(int, NSSLRead, int connection, const void* buf, int len,int * read);
|
|
||||||
EXPORT_DECL(int, NSSLCreateConnection, int context, const char* host, int hotlen,int options,int sock,int block);
|
|
||||||
|
|
||||||
void InitAcquireSocket(void)
|
|
||||||
{
|
|
||||||
OSDynLoad_Acquire("nsysnet.rpl", &nsysnet_handle);
|
|
||||||
}
|
|
||||||
|
|
||||||
void InitSocketFunctionPointers(void)
|
|
||||||
{
|
|
||||||
unsigned int *funcPointer = 0;
|
|
||||||
|
|
||||||
InitAcquireSocket();
|
|
||||||
|
|
||||||
OS_FIND_EXPORT(nsysnet_handle, socket_lib_init);
|
|
||||||
OS_FIND_EXPORT(nsysnet_handle, socket);
|
|
||||||
OS_FIND_EXPORT(nsysnet_handle, socketclose);
|
|
||||||
OS_FIND_EXPORT(nsysnet_handle, connect);
|
|
||||||
OS_FIND_EXPORT(nsysnet_handle, bind);
|
|
||||||
OS_FIND_EXPORT(nsysnet_handle, listen);
|
|
||||||
OS_FIND_EXPORT(nsysnet_handle, accept);
|
|
||||||
OS_FIND_EXPORT(nsysnet_handle, send);
|
|
||||||
OS_FIND_EXPORT(nsysnet_handle, recv);
|
|
||||||
OS_FIND_EXPORT(nsysnet_handle, recvfrom);
|
|
||||||
OS_FIND_EXPORT(nsysnet_handle, sendto);
|
|
||||||
OS_FIND_EXPORT(nsysnet_handle, setsockopt);
|
|
||||||
OS_FIND_EXPORT(nsysnet_handle, inet_ntoa);
|
|
||||||
OS_FIND_EXPORT(nsysnet_handle, inet_aton);
|
|
||||||
|
|
||||||
OS_FIND_EXPORT(nsysnet_handle, NSSLWrite);
|
|
||||||
OS_FIND_EXPORT(nsysnet_handle, NSSLRead);
|
|
||||||
OS_FIND_EXPORT(nsysnet_handle, NSSLCreateConnection);
|
|
||||||
|
|
||||||
socket_lib_init();
|
|
||||||
}
|
|
@ -1,108 +0,0 @@
|
|||||||
/****************************************************************************
|
|
||||||
* Copyright (C) 2015
|
|
||||||
* by Dimok
|
|
||||||
*
|
|
||||||
* This software is provided 'as-is', without any express or implied
|
|
||||||
* warranty. In no event will the authors be held liable for any
|
|
||||||
* damages arising from the use of this software.
|
|
||||||
*
|
|
||||||
* Permission is granted to anyone to use this software for any
|
|
||||||
* purpose, including commercial applications, and to alter it and
|
|
||||||
* redistribute it freely, subject to the following restrictions:
|
|
||||||
*
|
|
||||||
* 1. The origin of this software must not be misrepresented; you
|
|
||||||
* must not claim that you wrote the original software. If you use
|
|
||||||
* this software in a product, an acknowledgment in the product
|
|
||||||
* documentation would be appreciated but is not required.
|
|
||||||
*
|
|
||||||
* 2. Altered source versions must be plainly marked as such, and
|
|
||||||
* must not be misrepresented as being the original software.
|
|
||||||
*
|
|
||||||
* 3. This notice may not be removed or altered from any source
|
|
||||||
* distribution.
|
|
||||||
***************************************************************************/
|
|
||||||
#ifndef __SOCKET_FUNCTIONS_H_
|
|
||||||
#define __SOCKET_FUNCTIONS_H_
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
extern "C" {
|
|
||||||
#endif
|
|
||||||
|
|
||||||
extern unsigned int nsysnet_handle;
|
|
||||||
|
|
||||||
#include <gctypes.h>
|
|
||||||
|
|
||||||
#define INADDR_ANY 0
|
|
||||||
|
|
||||||
#define AF_INET 2
|
|
||||||
|
|
||||||
#define SOCK_STREAM 1
|
|
||||||
#define SOCK_DGRAM 2
|
|
||||||
|
|
||||||
#define IPPROTO_IP 0
|
|
||||||
#define IPPROTO_TCP 6
|
|
||||||
#define IPPROTO_UDP 17
|
|
||||||
|
|
||||||
#define TCP_NODELAY 0x2004
|
|
||||||
|
|
||||||
#define SOL_SOCKET -1
|
|
||||||
#define SO_REUSEADDR 0x0004
|
|
||||||
#define SO_NONBLOCK 0x1016
|
|
||||||
#define SO_MYADDR 0x1013
|
|
||||||
#define SO_RCVTIMEO 0x1006
|
|
||||||
|
|
||||||
#define SOL_SOCKET -1
|
|
||||||
#define MSG_DONTWAIT 32
|
|
||||||
|
|
||||||
#define htonl(x) x
|
|
||||||
#define htons(x) x
|
|
||||||
#define ntohl(x) x
|
|
||||||
#define ntohs(x) x
|
|
||||||
|
|
||||||
|
|
||||||
struct in_addr {
|
|
||||||
unsigned int s_addr;
|
|
||||||
};
|
|
||||||
struct sockaddr_in {
|
|
||||||
short sin_family;
|
|
||||||
unsigned short sin_port;
|
|
||||||
struct in_addr sin_addr;
|
|
||||||
char sin_zero[8];
|
|
||||||
};
|
|
||||||
|
|
||||||
struct sockaddr
|
|
||||||
{
|
|
||||||
unsigned short sa_family;
|
|
||||||
char sa_data[14];
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
void InitSocketFunctionPointers(void);
|
|
||||||
void InitAcquireSocket(void);
|
|
||||||
|
|
||||||
extern void (*socket_lib_init)(void);
|
|
||||||
extern int (*socket)(int domain, int type, int protocol);
|
|
||||||
extern int (*socketclose)(int s);
|
|
||||||
extern int (*connect)(int s, void *addr, int addrlen);
|
|
||||||
extern int (*bind)(s32 s,struct sockaddr *name,s32 namelen);
|
|
||||||
extern int (*listen)(s32 s,u32 backlog);
|
|
||||||
extern int (*accept)(s32 s,struct sockaddr *addr,s32 *addrlen);
|
|
||||||
extern int (*send)(int s, const void *buffer, int size, int flags);
|
|
||||||
extern int (*recv)(int s, void *buffer, int size, int flags);
|
|
||||||
extern int (*recvfrom)(int sockfd, void *buf, int len, int flags,struct sockaddr *src_addr, int *addrlen);
|
|
||||||
|
|
||||||
extern int (*sendto)(int s, const void *buffer, int size, int flags, const struct sockaddr *dest, int dest_len);
|
|
||||||
extern int (*setsockopt)(int s, int level, int optname, void *optval, int optlen);
|
|
||||||
|
|
||||||
extern int (* NSSLWrite)(int connection, const void* buf, int len,int * written);
|
|
||||||
extern int (* NSSLRead)(int connection, const void* buf, int len,int * read);
|
|
||||||
extern int (* NSSLCreateConnection)(int context, const char* host, int hotlen,int options,int sock,int block);
|
|
||||||
|
|
||||||
extern char * (*inet_ntoa)(struct in_addr in);
|
|
||||||
extern int (*inet_aton)(const char *cp, struct in_addr *inp);
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif // __SOCKET_FUNCTIONS_H_
|
|
@ -1,49 +0,0 @@
|
|||||||
/****************************************************************************
|
|
||||||
* Copyright (C) 2015
|
|
||||||
* by Dimok
|
|
||||||
*
|
|
||||||
* This software is provided 'as-is', without any express or implied
|
|
||||||
* warranty. In no event will the authors be held liable for any
|
|
||||||
* damages arising from the use of this software.
|
|
||||||
*
|
|
||||||
* Permission is granted to anyone to use this software for any
|
|
||||||
* purpose, including commercial applications, and to alter it and
|
|
||||||
* redistribute it freely, subject to the following restrictions:
|
|
||||||
*
|
|
||||||
* 1. The origin of this software must not be misrepresented; you
|
|
||||||
* must not claim that you wrote the original software. If you use
|
|
||||||
* this software in a product, an acknowledgment in the product
|
|
||||||
* documentation would be appreciated but is not required.
|
|
||||||
*
|
|
||||||
* 2. Altered source versions must be plainly marked as such, and
|
|
||||||
* must not be misrepresented as being the original software.
|
|
||||||
*
|
|
||||||
* 3. This notice may not be removed or altered from any source
|
|
||||||
* distribution.
|
|
||||||
***************************************************************************/
|
|
||||||
#include "os_functions.h"
|
|
||||||
|
|
||||||
unsigned int sysapp_handle __attribute__((section(".data"))) = 0;
|
|
||||||
|
|
||||||
EXPORT_DECL(int, _SYSLaunchTitleByPathFromLauncher, const char* path, int len, int zero);
|
|
||||||
EXPORT_DECL(int, SYSRelaunchTitle, int argc, char** argv);
|
|
||||||
EXPORT_DECL(int, SYSLaunchMenu, void);
|
|
||||||
EXPORT_DECL(int, SYSCheckTitleExists, u64 titleId);
|
|
||||||
EXPORT_DECL(int, SYSLaunchTitle, u64 titleId);
|
|
||||||
|
|
||||||
void InitAcquireSys(void)
|
|
||||||
{
|
|
||||||
OSDynLoad_Acquire("sysapp.rpl", &sysapp_handle);
|
|
||||||
}
|
|
||||||
|
|
||||||
void InitSysFunctionPointers(void)
|
|
||||||
{
|
|
||||||
unsigned int *funcPointer = 0;
|
|
||||||
InitAcquireSys();
|
|
||||||
|
|
||||||
OS_FIND_EXPORT(sysapp_handle, _SYSLaunchTitleByPathFromLauncher);
|
|
||||||
OS_FIND_EXPORT(sysapp_handle, SYSRelaunchTitle);
|
|
||||||
OS_FIND_EXPORT(sysapp_handle, SYSLaunchMenu);
|
|
||||||
OS_FIND_EXPORT(sysapp_handle, SYSCheckTitleExists);
|
|
||||||
OS_FIND_EXPORT(sysapp_handle, SYSLaunchTitle);
|
|
||||||
}
|
|
@ -1,47 +0,0 @@
|
|||||||
/****************************************************************************
|
|
||||||
* Copyright (C) 2015
|
|
||||||
* by Dimok
|
|
||||||
*
|
|
||||||
* This software is provided 'as-is', without any express or implied
|
|
||||||
* warranty. In no event will the authors be held liable for any
|
|
||||||
* damages arising from the use of this software.
|
|
||||||
*
|
|
||||||
* Permission is granted to anyone to use this software for any
|
|
||||||
* purpose, including commercial applications, and to alter it and
|
|
||||||
* redistribute it freely, subject to the following restrictions:
|
|
||||||
*
|
|
||||||
* 1. The origin of this software must not be misrepresented; you
|
|
||||||
* must not claim that you wrote the original software. If you use
|
|
||||||
* this software in a product, an acknowledgment in the product
|
|
||||||
* documentation would be appreciated but is not required.
|
|
||||||
*
|
|
||||||
* 2. Altered source versions must be plainly marked as such, and
|
|
||||||
* must not be misrepresented as being the original software.
|
|
||||||
*
|
|
||||||
* 3. This notice may not be removed or altered from any source
|
|
||||||
* distribution.
|
|
||||||
***************************************************************************/
|
|
||||||
#ifndef __SYS_FUNCTIONS_H_
|
|
||||||
#define __SYS_FUNCTIONS_H_
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
extern "C" {
|
|
||||||
#endif
|
|
||||||
|
|
||||||
extern unsigned int sysapp_handle;
|
|
||||||
|
|
||||||
void InitSysFunctionPointers(void);
|
|
||||||
void InitAcquireSys(void);
|
|
||||||
|
|
||||||
extern int(*_SYSLaunchTitleByPathFromLauncher)(const char* path, int len, int zero);
|
|
||||||
extern int (* SYSRelaunchTitle)(int argc, char** argv);
|
|
||||||
extern int (* SYSLaunchMenu)(void);
|
|
||||||
extern int (* SYSCheckTitleExists)(u64 titleId);
|
|
||||||
extern int (* SYSLaunchTitle)(u64 titleId);
|
|
||||||
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif // __SYS_FUNCTIONS_H_
|
|
@ -1,78 +0,0 @@
|
|||||||
/****************************************************************************
|
|
||||||
* Copyright (C) 2015
|
|
||||||
* by Dimok
|
|
||||||
*
|
|
||||||
* This software is provided 'as-is', without any express or implied
|
|
||||||
* warranty. In no event will the authors be held liable for any
|
|
||||||
* damages arising from the use of this software.
|
|
||||||
*
|
|
||||||
* Permission is granted to anyone to use this software for any
|
|
||||||
* purpose, including commercial applications, and to alter it and
|
|
||||||
* redistribute it freely, subject to the following restrictions:
|
|
||||||
*
|
|
||||||
* 1. The origin of this software must not be misrepresented; you
|
|
||||||
* must not claim that you wrote the original software. If you use
|
|
||||||
* this software in a product, an acknowledgment in the product
|
|
||||||
* documentation would be appreciated but is not required.
|
|
||||||
*
|
|
||||||
* 2. Altered source versions must be plainly marked as such, and
|
|
||||||
* must not be misrepresented as being the original software.
|
|
||||||
*
|
|
||||||
* 3. This notice may not be removed or altered from any source
|
|
||||||
* distribution.
|
|
||||||
***************************************************************************/
|
|
||||||
#include "os_functions.h"
|
|
||||||
#include "syshid_functions.h"
|
|
||||||
|
|
||||||
unsigned int syshid_handle __attribute__((section(".data"))) = 0;
|
|
||||||
|
|
||||||
EXPORT_DECL(int, HIDSetup,void);
|
|
||||||
EXPORT_DECL(int, HIDTeardown,void);
|
|
||||||
|
|
||||||
EXPORT_DECL(int, HIDAddClient,HIDClient *p_client, HIDAttachCallback attach_callback);
|
|
||||||
EXPORT_DECL(int, HIDDelClient,HIDClient *p_client);
|
|
||||||
|
|
||||||
EXPORT_DECL(int, HIDGetDescriptor,unsigned int handle,u8 descriptor_type,u8 descriptor_index, u16 language_id, unsigned char *p_buffer, unsigned int buffer_length, HIDCallback hc, void *p_user);
|
|
||||||
EXPORT_DECL(int, HIDSetDescriptor,unsigned int handle,u8 descriptor_type,u8 descriptor_index, u16 language_id, unsigned char *p_buffer, unsigned int buffer_length, HIDCallback hc, void *p_user);
|
|
||||||
|
|
||||||
EXPORT_DECL(int, HIDSetProtocol,unsigned int handle,u8 interface_index,u8 protocol, HIDCallback hc, void *p_user);
|
|
||||||
EXPORT_DECL(int, HIDGetProtocol,unsigned int handle,u8 interface_index,u8 * protocol, HIDCallback hc, void *p_user);
|
|
||||||
|
|
||||||
EXPORT_DECL(int, HIDGetReport,u32 handle, u8 report_type, u8 report_id, u8 *p_buffer, u32 buffer_length, HIDCallback hc, void *p_user);
|
|
||||||
EXPORT_DECL(int, HIDSetReport,u32 handle, u8 report_type, u8 report_id, u8 *p_buffer, u32 buffer_length, HIDCallback hc, void *p_user);
|
|
||||||
|
|
||||||
EXPORT_DECL(int, HIDSetIdle,unsigned int handle, u8 interface_index,u8 duration, HIDCallback hc, void *p_user);
|
|
||||||
|
|
||||||
EXPORT_DECL(int, HIDRead,unsigned int handle, unsigned char *p_buffer, unsigned int buffer_length, HIDCallback hc, void *p_user);
|
|
||||||
EXPORT_DECL(int, HIDWrite,unsigned int handle, unsigned char *p_buffer, unsigned int buffer_length, HIDCallback hc, void *p_user);
|
|
||||||
|
|
||||||
void InitAcquireSysHID(void)
|
|
||||||
{
|
|
||||||
OSDynLoad_Acquire("nsyshid.rpl", &syshid_handle);
|
|
||||||
}
|
|
||||||
|
|
||||||
void InitSysHIDFunctionPointers(void)
|
|
||||||
{
|
|
||||||
InitAcquireSysHID();
|
|
||||||
|
|
||||||
if(syshid_handle == 0){
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
unsigned int funcPointer = 0;
|
|
||||||
|
|
||||||
//! assigning those is not mandatory and it does not always work to load them
|
|
||||||
OS_FIND_EXPORT(syshid_handle, HIDSetup);
|
|
||||||
OS_FIND_EXPORT(syshid_handle, HIDTeardown);
|
|
||||||
OS_FIND_EXPORT(syshid_handle, HIDAddClient);
|
|
||||||
OS_FIND_EXPORT(syshid_handle, HIDDelClient);
|
|
||||||
OS_FIND_EXPORT(syshid_handle, HIDGetDescriptor);
|
|
||||||
OS_FIND_EXPORT(syshid_handle, HIDSetDescriptor);
|
|
||||||
OS_FIND_EXPORT(syshid_handle, HIDRead);
|
|
||||||
OS_FIND_EXPORT(syshid_handle, HIDWrite);
|
|
||||||
OS_FIND_EXPORT(syshid_handle, HIDSetProtocol);
|
|
||||||
OS_FIND_EXPORT(syshid_handle, HIDGetProtocol);
|
|
||||||
OS_FIND_EXPORT(syshid_handle, HIDSetIdle);
|
|
||||||
OS_FIND_EXPORT(syshid_handle, HIDGetReport);
|
|
||||||
OS_FIND_EXPORT(syshid_handle, HIDSetReport);
|
|
||||||
}
|
|
@ -1,90 +0,0 @@
|
|||||||
/****************************************************************************
|
|
||||||
* Copyright (C) 2015
|
|
||||||
* by Dimok
|
|
||||||
*
|
|
||||||
* This software is provided 'as-is', without any express or implied
|
|
||||||
* warranty. In no event will the authors be held liable for any
|
|
||||||
* damages arising from the use of this software.
|
|
||||||
*
|
|
||||||
* Permission is granted to anyone to use this software for any
|
|
||||||
* purpose, including commercial applications, and to alter it and
|
|
||||||
* redistribute it freely, subject to the following restrictions:
|
|
||||||
*
|
|
||||||
* 1. The origin of this software must not be misrepresented; you
|
|
||||||
* must not claim that you wrote the original software. If you use
|
|
||||||
* this software in a product, an acknowledgment in the product
|
|
||||||
* documentation would be appreciated but is not required.
|
|
||||||
*
|
|
||||||
* 2. Altered source versions must be plainly marked as such, and
|
|
||||||
* must not be misrepresented as being the original software.
|
|
||||||
*
|
|
||||||
* 3. This notice may not be removed or altered from any source
|
|
||||||
* distribution.
|
|
||||||
***************************************************************************/
|
|
||||||
#ifndef __SYSHID_FUNCTIONS_H_
|
|
||||||
#define __SYSHID_FUNCTIONS_H_
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
extern "C" {
|
|
||||||
#endif
|
|
||||||
|
|
||||||
extern unsigned int syshid_handle;
|
|
||||||
|
|
||||||
typedef struct
|
|
||||||
{
|
|
||||||
unsigned int handle;
|
|
||||||
unsigned int physical_device_inst;
|
|
||||||
unsigned short vid;
|
|
||||||
unsigned short pid;
|
|
||||||
unsigned char interface_index;
|
|
||||||
unsigned char sub_class;
|
|
||||||
unsigned char protocol;
|
|
||||||
|
|
||||||
unsigned short max_packet_size_rx;
|
|
||||||
unsigned short max_packet_size_tx;
|
|
||||||
|
|
||||||
} HIDDevice;
|
|
||||||
|
|
||||||
typedef struct _HIDClient HIDClient;
|
|
||||||
|
|
||||||
#define HID_DEVICE_DETACH 0
|
|
||||||
#define HID_DEVICE_ATTACH 1
|
|
||||||
|
|
||||||
typedef int (*HIDAttachCallback)(HIDClient *p_hc,HIDDevice *p_hd,unsigned int attach);
|
|
||||||
|
|
||||||
struct _HIDClient
|
|
||||||
{
|
|
||||||
HIDClient *next;
|
|
||||||
HIDAttachCallback attach_cb;
|
|
||||||
};
|
|
||||||
|
|
||||||
typedef void (*HIDCallback)(unsigned int handle,int error,unsigned char *p_buffer,unsigned int bytes_transferred,void *p_user);
|
|
||||||
|
|
||||||
void InitSysHIDFunctionPointers(void);
|
|
||||||
void InitAcquireSysHID(void);
|
|
||||||
|
|
||||||
extern int(*HIDSetup)(void);
|
|
||||||
extern int(*HIDTeardown)(void);
|
|
||||||
|
|
||||||
extern int(*HIDAddClient)(HIDClient *p_client, HIDAttachCallback attach_callback);
|
|
||||||
extern int(*HIDDelClient)(HIDClient *p_client);
|
|
||||||
|
|
||||||
extern int(*HIDGetDescriptor)(unsigned int handle,u8 descriptor_type,u8 descriptor_index, u16 language_id, unsigned char *p_buffer, unsigned int buffer_length, HIDCallback hc, void *p_user);
|
|
||||||
extern int(*HIDSetDescriptor)(unsigned int handle,u8 descriptor_type,u8 descriptor_index, u16 language_id, unsigned char *p_buffer, unsigned int buffer_length, HIDCallback hc, void *p_user);
|
|
||||||
|
|
||||||
extern int(*HIDGetReport)(u32 handle, u8 report_type, u8 report_id, u8 *p_buffer, u32 buffer_length, HIDCallback hc, void *p_user);
|
|
||||||
extern int(*HIDSetReport)(u32 handle, u8 report_type, u8 report_id, u8 *p_buffer, u32 buffer_length, HIDCallback hc, void *p_user);
|
|
||||||
|
|
||||||
extern int(*HIDSetIdle)(unsigned int handle, u8 interface_index,u8 duration, HIDCallback hc, void *p_user);
|
|
||||||
|
|
||||||
extern int(* HIDSetProtocol)(unsigned int handle,u8 interface_index,u8 protocol, HIDCallback hc, void *p_user);
|
|
||||||
extern int(* HIDGetProtocol)(unsigned int handle,u8 interface_index,u8 * protocol, HIDCallback hc, void *p_user);
|
|
||||||
|
|
||||||
extern int(*HIDRead)(unsigned int handle, unsigned char *p_buffer, unsigned int buffer_length, HIDCallback hc, void *p_user);
|
|
||||||
extern int(*HIDWrite)(unsigned int handle, unsigned char *p_buffer, unsigned int buffer_length, HIDCallback hc, void *p_user);
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif // __SYSHID_FUNCTIONS_H_
|
|
@ -1,55 +0,0 @@
|
|||||||
/****************************************************************************
|
|
||||||
* Copyright (C) 2015
|
|
||||||
* by Dimok
|
|
||||||
*
|
|
||||||
* This software is provided 'as-is', without any express or implied
|
|
||||||
* warranty. In no event will the authors be held liable for any
|
|
||||||
* damages arising from the use of this software.
|
|
||||||
*
|
|
||||||
* Permission is granted to anyone to use this software for any
|
|
||||||
* purpose, including commercial applications, and to alter it and
|
|
||||||
* redistribute it freely, subject to the following restrictions:
|
|
||||||
*
|
|
||||||
* 1. The origin of this software must not be misrepresented; you
|
|
||||||
* must not claim that you wrote the original software. If you use
|
|
||||||
* this software in a product, an acknowledgment in the product
|
|
||||||
* documentation would be appreciated but is not required.
|
|
||||||
*
|
|
||||||
* 2. Altered source versions must be plainly marked as such, and
|
|
||||||
* must not be misrepresented as being the original software.
|
|
||||||
*
|
|
||||||
* 3. This notice may not be removed or altered from any source
|
|
||||||
* distribution.
|
|
||||||
***************************************************************************/
|
|
||||||
#include "os_functions.h"
|
|
||||||
#include "vpad_functions.h"
|
|
||||||
|
|
||||||
unsigned int vpad_handle __attribute__((section(".data"))) = 0;
|
|
||||||
unsigned int vpadbase_handle __attribute__((section(".data"))) = 0;
|
|
||||||
|
|
||||||
EXPORT_DECL(void, VPADInit, void);
|
|
||||||
EXPORT_DECL(int, VPADRead, int chan, VPADData *buffer, u32 buffer_size, s32 *error);
|
|
||||||
EXPORT_DECL(int, VPADGetLcdMode, int padnum, int *lcdmode);
|
|
||||||
EXPORT_DECL(int, VPADSetLcdMode, int padnum, int lcdmode);
|
|
||||||
EXPORT_DECL(int, VPADBASEGetMotorOnRemainingCount, int padnum);
|
|
||||||
EXPORT_DECL(int, VPADBASESetMotorOnRemainingCount, int padnum, int counter);
|
|
||||||
|
|
||||||
void InitAcquireVPad(void)
|
|
||||||
{
|
|
||||||
OSDynLoad_Acquire("vpad.rpl", &vpad_handle);
|
|
||||||
OSDynLoad_Acquire("vpadbase.rpl", &vpadbase_handle);
|
|
||||||
}
|
|
||||||
|
|
||||||
void InitVPadFunctionPointers(void)
|
|
||||||
{
|
|
||||||
unsigned int *funcPointer = 0;
|
|
||||||
|
|
||||||
InitAcquireVPad();
|
|
||||||
|
|
||||||
OS_FIND_EXPORT(vpad_handle, VPADInit);
|
|
||||||
OS_FIND_EXPORT(vpad_handle, VPADRead);
|
|
||||||
OS_FIND_EXPORT(vpad_handle, VPADGetLcdMode);
|
|
||||||
OS_FIND_EXPORT(vpad_handle, VPADSetLcdMode);
|
|
||||||
OS_FIND_EXPORT(vpadbase_handle, VPADBASEGetMotorOnRemainingCount);
|
|
||||||
OS_FIND_EXPORT(vpadbase_handle, VPADBASESetMotorOnRemainingCount);
|
|
||||||
}
|
|
@ -1,114 +0,0 @@
|
|||||||
/****************************************************************************
|
|
||||||
* Copyright (C) 2015
|
|
||||||
* by Dimok
|
|
||||||
*
|
|
||||||
* This software is provided 'as-is', without any express or implied
|
|
||||||
* warranty. In no event will the authors be held liable for any
|
|
||||||
* damages arising from the use of this software.
|
|
||||||
*
|
|
||||||
* Permission is granted to anyone to use this software for any
|
|
||||||
* purpose, including commercial applications, and to alter it and
|
|
||||||
* redistribute it freely, subject to the following restrictions:
|
|
||||||
*
|
|
||||||
* 1. The origin of this software must not be misrepresented; you
|
|
||||||
* must not claim that you wrote the original software. If you use
|
|
||||||
* this software in a product, an acknowledgment in the product
|
|
||||||
* documentation would be appreciated but is not required.
|
|
||||||
*
|
|
||||||
* 2. Altered source versions must be plainly marked as such, and
|
|
||||||
* must not be misrepresented as being the original software.
|
|
||||||
*
|
|
||||||
* 3. This notice may not be removed or altered from any source
|
|
||||||
* distribution.
|
|
||||||
***************************************************************************/
|
|
||||||
#ifndef __VPAD_FUNCTIONS_H_
|
|
||||||
#define __VPAD_FUNCTIONS_H_
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
extern "C" {
|
|
||||||
#endif
|
|
||||||
|
|
||||||
extern unsigned int vpad_handle;
|
|
||||||
extern unsigned int vpadbase_handle;
|
|
||||||
|
|
||||||
#include <gctypes.h>
|
|
||||||
|
|
||||||
#define VPAD_BUTTON_A 0x8000
|
|
||||||
#define VPAD_BUTTON_B 0x4000
|
|
||||||
#define VPAD_BUTTON_X 0x2000
|
|
||||||
#define VPAD_BUTTON_Y 0x1000
|
|
||||||
#define VPAD_BUTTON_LEFT 0x0800
|
|
||||||
#define VPAD_BUTTON_RIGHT 0x0400
|
|
||||||
#define VPAD_BUTTON_UP 0x0200
|
|
||||||
#define VPAD_BUTTON_DOWN 0x0100
|
|
||||||
#define VPAD_BUTTON_ZL 0x0080
|
|
||||||
#define VPAD_BUTTON_ZR 0x0040
|
|
||||||
#define VPAD_BUTTON_L 0x0020
|
|
||||||
#define VPAD_BUTTON_R 0x0010
|
|
||||||
#define VPAD_BUTTON_PLUS 0x0008
|
|
||||||
#define VPAD_BUTTON_MINUS 0x0004
|
|
||||||
#define VPAD_BUTTON_HOME 0x0002
|
|
||||||
#define VPAD_BUTTON_SYNC 0x0001
|
|
||||||
#define VPAD_BUTTON_STICK_R 0x00020000
|
|
||||||
#define VPAD_BUTTON_STICK_L 0x00040000
|
|
||||||
#define VPAD_BUTTON_TV 0x00010000
|
|
||||||
|
|
||||||
#define VPAD_STICK_R_EMULATION_LEFT 0x04000000
|
|
||||||
#define VPAD_STICK_R_EMULATION_RIGHT 0x02000000
|
|
||||||
#define VPAD_STICK_R_EMULATION_UP 0x01000000
|
|
||||||
#define VPAD_STICK_R_EMULATION_DOWN 0x00800000
|
|
||||||
|
|
||||||
#define VPAD_STICK_L_EMULATION_LEFT 0x40000000
|
|
||||||
#define VPAD_STICK_L_EMULATION_RIGHT 0x20000000
|
|
||||||
#define VPAD_STICK_L_EMULATION_UP 0x10000000
|
|
||||||
#define VPAD_STICK_L_EMULATION_DOWN 0x08000000
|
|
||||||
|
|
||||||
//! Own definitions
|
|
||||||
#define VPAD_BUTTON_TOUCH 0x00080000
|
|
||||||
#define VPAD_MASK_EMULATED_STICKS 0x7F800000
|
|
||||||
#define VPAD_MASK_BUTTONS ~VPAD_MASK_EMULATED_STICKS
|
|
||||||
|
|
||||||
typedef struct
|
|
||||||
{
|
|
||||||
f32 x,y;
|
|
||||||
} Vec2D;
|
|
||||||
|
|
||||||
typedef struct
|
|
||||||
{
|
|
||||||
u16 x, y; /* Touch coordinates */
|
|
||||||
u16 touched; /* 1 = Touched, 0 = Not touched */
|
|
||||||
u16 invalid; /* 0 = All valid, 1 = X invalid, 2 = Y invalid, 3 = Both invalid? */
|
|
||||||
} VPADTPData;
|
|
||||||
|
|
||||||
typedef struct
|
|
||||||
{
|
|
||||||
u32 btns_h; /* Held buttons */
|
|
||||||
u32 btns_d; /* Buttons that are pressed at that instant */
|
|
||||||
u32 btns_r; /* Released buttons */
|
|
||||||
Vec2D lstick, rstick; /* Each contains 4-byte X and Y components */
|
|
||||||
char unknown1c[0x52 - 0x1c]; /* Contains accelerometer and gyroscope data somewhere */
|
|
||||||
VPADTPData tpdata; /* Normal touchscreen data */
|
|
||||||
VPADTPData tpdata1; /* Modified touchscreen data 1 */
|
|
||||||
VPADTPData tpdata2; /* Modified touchscreen data 2 */
|
|
||||||
char unknown6a[0xa0 - 0x6a];
|
|
||||||
uint8_t volume;
|
|
||||||
uint8_t battery; /* 0 to 6 */
|
|
||||||
uint8_t unk_volume; /* One less than volume */
|
|
||||||
char unknowna4[0xac - 0xa4];
|
|
||||||
} VPADData;
|
|
||||||
|
|
||||||
void InitVPadFunctionPointers(void);
|
|
||||||
void InitAcquireVPad(void);
|
|
||||||
|
|
||||||
extern int (* VPADRead)(int chan, VPADData *buffer, u32 buffer_size, s32 *error);
|
|
||||||
extern int (* VPADGetLcdMode)(int padnum, int *lcdmode);
|
|
||||||
extern int (* VPADSetLcdMode)(int padnum, int lcdmode);
|
|
||||||
extern void (* VPADInit)(void);
|
|
||||||
extern int (* VPADBASEGetMotorOnRemainingCount)(int lcdmode);
|
|
||||||
extern int (* VPADBASESetMotorOnRemainingCount)(int lcdmode,int counter);
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif // __VPAD_FUNCTIONS_H_
|
|
@ -1,11 +1,12 @@
|
|||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include "dynamic_libs/os_functions.h"
|
#include <coreinit/title.h>
|
||||||
#include "dynamic_libs/sys_functions.h"
|
|
||||||
#include "common/common.h"
|
#include "common/common.h"
|
||||||
#include "utils/utils.h"
|
#include "utils/utils.h"
|
||||||
#include "main.h"
|
#include "main.h"
|
||||||
|
|
||||||
int __entry_menu(int argc, char **argv)
|
static volatile uint8_t ucRunOnce = 0;
|
||||||
|
|
||||||
|
int main(int argc, char **argv)
|
||||||
{
|
{
|
||||||
//! *******************************************************************
|
//! *******************************************************************
|
||||||
//! * Jump to our application *
|
//! * Jump to our application *
|
||||||
|
@ -2,7 +2,6 @@
|
|||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include "CFile.hpp"
|
#include "CFile.hpp"
|
||||||
|
|
||||||
|
|
||||||
CFile::CFile()
|
CFile::CFile()
|
||||||
{
|
{
|
||||||
iFd = -1;
|
iFd = -1;
|
||||||
|
@ -4,9 +4,9 @@
|
|||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <fcntl.h>
|
|
||||||
#include <gctypes.h>
|
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
|
#include <fcntl.h>
|
||||||
|
#include "common/types.h"
|
||||||
|
|
||||||
class CFile
|
class CFile
|
||||||
{
|
{
|
||||||
|
@ -39,11 +39,12 @@ DirList::DirList()
|
|||||||
{
|
{
|
||||||
Flags = 0;
|
Flags = 0;
|
||||||
Filter = 0;
|
Filter = 0;
|
||||||
|
Depth = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
DirList::DirList(const std::string & path, const char *filter, u32 flags)
|
DirList::DirList(const std::string & path, const char *filter, u32 flags, u32 maxDepth)
|
||||||
{
|
{
|
||||||
this->LoadPath(path, filter, flags);
|
this->LoadPath(path, filter, flags, maxDepth);
|
||||||
this->SortList();
|
this->SortList();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -52,12 +53,13 @@ DirList::~DirList()
|
|||||||
ClearList();
|
ClearList();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool DirList::LoadPath(const std::string & folder, const char *filter, u32 flags)
|
bool DirList::LoadPath(const std::string & folder, const char *filter, u32 flags, u32 maxDepth)
|
||||||
{
|
{
|
||||||
if(folder.empty()) return false;
|
if(folder.empty()) return false;
|
||||||
|
|
||||||
Flags = flags;
|
Flags = flags;
|
||||||
Filter = filter;
|
Filter = filter;
|
||||||
|
Depth = maxDepth;
|
||||||
|
|
||||||
std::string folderpath(folder);
|
std::string folderpath(folder);
|
||||||
u32 length = folderpath.size();
|
u32 length = folderpath.size();
|
||||||
@ -69,6 +71,10 @@ bool DirList::LoadPath(const std::string & folder, const char *filter, u32 flags
|
|||||||
if(length > 0 && folderpath[length-1] == '/')
|
if(length > 0 && folderpath[length-1] == '/')
|
||||||
folderpath.erase(length-1);
|
folderpath.erase(length-1);
|
||||||
|
|
||||||
|
//! add root slash if missing
|
||||||
|
if(folderpath.find('/') == std::string::npos)
|
||||||
|
folderpath += '/';
|
||||||
|
|
||||||
return InternalLoadPath(folderpath);
|
return InternalLoadPath(folderpath);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -94,14 +100,17 @@ bool DirList::InternalLoadPath(std::string &folderpath)
|
|||||||
if(strcmp(filename,".") == 0 || strcmp(filename,"..") == 0)
|
if(strcmp(filename,".") == 0 || strcmp(filename,"..") == 0)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if(Flags & CheckSubfolders)
|
if((Flags & CheckSubfolders) && (Depth > 0))
|
||||||
{
|
{
|
||||||
int length = folderpath.size();
|
int length = folderpath.size();
|
||||||
if(length > 2 && folderpath[length-1] != '/')
|
if(length > 2 && folderpath[length-1] != '/')
|
||||||
folderpath += '/';
|
folderpath += '/';
|
||||||
folderpath += filename;
|
folderpath += filename;
|
||||||
|
|
||||||
|
Depth--;
|
||||||
InternalLoadPath(folderpath);
|
InternalLoadPath(folderpath);
|
||||||
folderpath.erase(length);
|
folderpath.erase(length);
|
||||||
|
Depth++;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!(Flags & Dirs))
|
if(!(Flags & Dirs))
|
||||||
|
@ -29,7 +29,7 @@
|
|||||||
|
|
||||||
#include <vector>
|
#include <vector>
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <gctypes.h>
|
#include "common/types.h"
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
@ -45,11 +45,11 @@ public:
|
|||||||
//!\param path Path from where to load the filelist of all files
|
//!\param path Path from where to load the filelist of all files
|
||||||
//!\param filter A fileext that needs to be filtered
|
//!\param filter A fileext that needs to be filtered
|
||||||
//!\param flags search/filter flags from the enum
|
//!\param flags search/filter flags from the enum
|
||||||
DirList(const std::string & path, const char *filter = NULL, u32 flags = Files | Dirs);
|
DirList(const std::string & path, const char *filter = NULL, u32 flags = Files | Dirs, u32 maxDepth = 0xffffffff);
|
||||||
//!Destructor
|
//!Destructor
|
||||||
virtual ~DirList();
|
virtual ~DirList();
|
||||||
//! Load all the files from a directory
|
//! Load all the files from a directory
|
||||||
bool LoadPath(const std::string & path, const char *filter = NULL, u32 flags = Files | Dirs);
|
bool LoadPath(const std::string & path, const char *filter = NULL, u32 flags = Files | Dirs, u32 maxDepth = 0xffffffff);
|
||||||
//! Get a filename of the list
|
//! Get a filename of the list
|
||||||
//!\param list index
|
//!\param list index
|
||||||
const char * GetFilename(int index) const;
|
const char * GetFilename(int index) const;
|
||||||
@ -88,6 +88,7 @@ protected:
|
|||||||
inline bool valid(u32 pos) const { return (pos < FileInfo.size()); };
|
inline bool valid(u32 pos) const { return (pos < FileInfo.size()); };
|
||||||
|
|
||||||
u32 Flags;
|
u32 Flags;
|
||||||
|
u32 Depth;
|
||||||
const char *Filter;
|
const char *Filter;
|
||||||
std::vector<DirEntry> FileInfo;
|
std::vector<DirEntry> FileInfo;
|
||||||
};
|
};
|
||||||
|
@ -3,14 +3,15 @@
|
|||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include <fcntl.h>
|
#include <fcntl.h>
|
||||||
#include "dynamic_libs/fs_defs.h"
|
#include <coreinit/filesystem.h>
|
||||||
#include "dynamic_libs/fs_functions.h"
|
|
||||||
|
#define FS_MAX_MOUNTPATH_SIZE 128
|
||||||
|
|
||||||
int MountFS(void *pClient, void *pCmd, char **mount_path)
|
int MountFS(void *pClient, void *pCmd, char **mount_path)
|
||||||
{
|
{
|
||||||
int result = -1;
|
int result = -1;
|
||||||
|
|
||||||
void *mountSrc = malloc(FS_MOUNT_SOURCE_SIZE);
|
void *mountSrc = malloc(sizeof(FSMountSource));
|
||||||
if(!mountSrc)
|
if(!mountSrc)
|
||||||
return -3;
|
return -3;
|
||||||
|
|
||||||
@ -20,11 +21,11 @@ int MountFS(void *pClient, void *pCmd, char **mount_path)
|
|||||||
return -4;
|
return -4;
|
||||||
}
|
}
|
||||||
|
|
||||||
memset(mountSrc, 0, FS_MOUNT_SOURCE_SIZE);
|
memset(mountSrc, 0, sizeof(FSMountSource));
|
||||||
memset(mountPath, 0, FS_MAX_MOUNTPATH_SIZE);
|
memset(mountPath, 0, FS_MAX_MOUNTPATH_SIZE);
|
||||||
|
|
||||||
// Mount sdcard
|
// Mount sdcard
|
||||||
if (FSGetMountSource(pClient, pCmd, FS_SOURCETYPE_EXTERNAL, mountSrc, -1) == 0)
|
if (FSGetMountSource(pClient, pCmd, FS_MOUNT_SOURCE_SD, mountSrc, -1) == 0)
|
||||||
{
|
{
|
||||||
result = FSMount(pClient, pCmd, mountSrc, mountPath, FS_MAX_MOUNTPATH_SIZE, -1);
|
result = FSMount(pClient, pCmd, mountSrc, mountPath, FS_MAX_MOUNTPATH_SIZE, -1);
|
||||||
if((result == 0) && mount_path) {
|
if((result == 0) && mount_path) {
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <gctypes.h>
|
#include "common/types.h"
|
||||||
|
|
||||||
int MountFS(void *pClient, void *pCmd, char **mount_path);
|
int MountFS(void *pClient, void *pCmd, char **mount_path);
|
||||||
int UmountFS(void *pClient, void *pCmd, const char *mountPath);
|
int UmountFS(void *pClient, void *pCmd, const char *mountPath);
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -1,38 +0,0 @@
|
|||||||
/***************************************************************************
|
|
||||||
* Copyright (C) 2015
|
|
||||||
* by Dimok
|
|
||||||
*
|
|
||||||
* This software is provided 'as-is', without any express or implied
|
|
||||||
* warranty. In no event will the authors be held liable for any
|
|
||||||
* damages arising from the use of this software.
|
|
||||||
*
|
|
||||||
* Permission is granted to anyone to use this software for any
|
|
||||||
* purpose, including commercial applications, and to alter it and
|
|
||||||
* redistribute it freely, subject to the following restrictions:
|
|
||||||
*
|
|
||||||
* 1. The origin of this software must not be misrepresented; you
|
|
||||||
* must not claim that you wrote the original software. If you use
|
|
||||||
* this software in a product, an acknowledgment in the product
|
|
||||||
* documentation would be appreciated but is not required.
|
|
||||||
*
|
|
||||||
* 2. Altered source versions must be plainly marked as such, and
|
|
||||||
* must not be misrepresented as being the original software.
|
|
||||||
*
|
|
||||||
* 3. This notice may not be removed or altered from any source
|
|
||||||
* distribution.
|
|
||||||
***************************************************************************/
|
|
||||||
#ifndef __SD_FAT_DEVOPTAB_H_
|
|
||||||
#define __SD_FAT_DEVOPTAB_H_
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
extern "C" {
|
|
||||||
#endif
|
|
||||||
|
|
||||||
int mount_sd_fat(const char *path);
|
|
||||||
int unmount_sd_fat(const char *path);
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif // __SD_FAT_DEVOPTAB_H_
|
|
@ -20,10 +20,9 @@
|
|||||||
* along with FreeTypeGX. If not, see <http://www.gnu.org/licenses/>.
|
* along with FreeTypeGX. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "FreeTypeGX.h"
|
|
||||||
#include "video/CVideo.h"
|
#include "video/CVideo.h"
|
||||||
#include "video/shaders/Texture2DShader.h"
|
#include "video/shaders/Texture2DShader.h"
|
||||||
#include "utils/logger.h"
|
#include "FreeTypeGX.h"
|
||||||
|
|
||||||
using namespace std;
|
using namespace std;
|
||||||
|
|
||||||
@ -36,7 +35,7 @@ FreeTypeGX::FreeTypeGX(const uint8_t* fontBuffer, FT_Long bufferSize, bool lastF
|
|||||||
{
|
{
|
||||||
int faceIndex = 0;
|
int faceIndex = 0;
|
||||||
ftPointSize = 0;
|
ftPointSize = 0;
|
||||||
GX2InitSampler(&ftSampler, GX2_TEX_CLAMP_CLAMP_BORDER, GX2_TEX_XY_FILTER_BILINEAR);
|
GX2InitSampler(&ftSampler, GX2_TEX_CLAMP_MODE_CLAMP_BORDER, GX2_TEX_XY_FILTER_MODE_LINEAR);
|
||||||
|
|
||||||
FT_Init_FreeType(&ftLibrary);
|
FT_Init_FreeType(&ftLibrary);
|
||||||
if(lastFace)
|
if(lastFace)
|
||||||
@ -163,8 +162,8 @@ void FreeTypeGX::unloadFont()
|
|||||||
{
|
{
|
||||||
if(itr2->second.texture)
|
if(itr2->second.texture)
|
||||||
{
|
{
|
||||||
if(itr2->second.texture->surface.image_data)
|
if(itr2->second.texture->surface.image)
|
||||||
free(itr2->second.texture->surface.image_data);
|
free(itr2->second.texture->surface.image);
|
||||||
|
|
||||||
delete itr2->second.texture;
|
delete itr2->second.texture;
|
||||||
itr2->second.texture = NULL;
|
itr2->second.texture = NULL;
|
||||||
@ -235,7 +234,7 @@ ftgxCharData * FreeTypeGX::cacheGlyphData(wchar_t charCode, int16_t pixelSize)
|
|||||||
|
|
||||||
//! Initialize texture
|
//! Initialize texture
|
||||||
charData->texture = new GX2Texture;
|
charData->texture = new GX2Texture;
|
||||||
GX2InitTexture(charData->texture, textureWidth, textureHeight, 1, 0, GX2_SURFACE_FORMAT_TC_R5_G5_B5_A1_UNORM, GX2_SURFACE_DIM_2D, GX2_TILE_MODE_LINEAR_ALIGNED);
|
GX2InitTexture(charData->texture, textureWidth, textureHeight, 1, 0, GX2_SURFACE_FORMAT_UNORM_R5_G5_B5_A1, GX2_SURFACE_DIM_TEXTURE_2D, GX2_TILE_MODE_LINEAR_ALIGNED);
|
||||||
|
|
||||||
loadGlyphData(glyphBitmap, charData);
|
loadGlyphData(glyphBitmap, charData);
|
||||||
|
|
||||||
@ -277,14 +276,14 @@ uint16_t FreeTypeGX::cacheGlyphDataComplete(int16_t pixelSize)
|
|||||||
|
|
||||||
void FreeTypeGX::loadGlyphData(FT_Bitmap *bmp, ftgxCharData *charData)
|
void FreeTypeGX::loadGlyphData(FT_Bitmap *bmp, ftgxCharData *charData)
|
||||||
{
|
{
|
||||||
charData->texture->surface.image_data = (uint8_t *) memalign(charData->texture->surface.align, charData->texture->surface.image_size);
|
charData->texture->surface.image = (uint8_t *) memalign(charData->texture->surface.alignment, charData->texture->surface.imageSize);
|
||||||
if(!charData->texture->surface.image_data)
|
if(!charData->texture->surface.image)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
memset(charData->texture->surface.image_data, 0x00, charData->texture->surface.image_size);
|
memset(charData->texture->surface.image, 0x00, charData->texture->surface.imageSize);
|
||||||
|
|
||||||
uint8_t *src = (uint8_t *)bmp->buffer;
|
uint8_t *src = (uint8_t *)bmp->buffer;
|
||||||
uint16_t *dst = (uint16_t *)charData->texture->surface.image_data;
|
uint16_t *dst = (uint16_t *)charData->texture->surface.image;
|
||||||
int32_t x, y;
|
int32_t x, y;
|
||||||
|
|
||||||
for(y = 0; y < bmp->rows; y++)
|
for(y = 0; y < bmp->rows; y++)
|
||||||
@ -295,7 +294,7 @@ void FreeTypeGX::loadGlyphData(FT_Bitmap *bmp, ftgxCharData *charData)
|
|||||||
dst[y * charData->texture->surface.pitch + x] = intensity ? ((intensity << 11) | (intensity << 6) | (intensity << 1) | 1) : 0;
|
dst[y * charData->texture->surface.pitch + x] = intensity ? ((intensity << 11) | (intensity << 6) | (intensity << 1) | 1) : 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
GX2Invalidate(GX2_INVALIDATE_CPU_TEXTURE, charData->texture->surface.image_data, charData->texture->surface.image_size);
|
GX2Invalidate(GX2_INVALIDATE_MODE_CPU_TEXTURE, charData->texture->surface.image, charData->texture->surface.imageSize);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -390,6 +389,7 @@ uint16_t FreeTypeGX::drawText(CVideo *video, int16_t x, int16_t y, int16_t z, co
|
|||||||
}
|
}
|
||||||
|
|
||||||
int i = 0;
|
int i = 0;
|
||||||
|
|
||||||
while (text[i])
|
while (text[i])
|
||||||
{
|
{
|
||||||
ftgxCharData* glyphData = cacheGlyphData(text[i], pixelSize);
|
ftgxCharData* glyphData = cacheGlyphData(text[i], pixelSize);
|
||||||
|
@ -23,7 +23,6 @@
|
|||||||
#ifndef FREETYPEGX_H_
|
#ifndef FREETYPEGX_H_
|
||||||
#define FREETYPEGX_H_
|
#define FREETYPEGX_H_
|
||||||
|
|
||||||
#include <gctypes.h>
|
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <ft2build.h>
|
#include <ft2build.h>
|
||||||
#include FT_FREETYPE_H
|
#include FT_FREETYPE_H
|
||||||
@ -37,7 +36,7 @@
|
|||||||
#include <glm/glm.hpp>
|
#include <glm/glm.hpp>
|
||||||
#include <glm/gtc/matrix_transform.hpp>
|
#include <glm/gtc/matrix_transform.hpp>
|
||||||
|
|
||||||
#include "dynamic_libs/gx2_functions.h"
|
#include "common/types.h"
|
||||||
|
|
||||||
/*! \struct ftgxCharData_
|
/*! \struct ftgxCharData_
|
||||||
*
|
*
|
||||||
|
@ -41,12 +41,12 @@ GameIcon::GameIcon(const std::string & filename, GuiImageData *preloadImage)
|
|||||||
if(posVtxs)
|
if(posVtxs)
|
||||||
{
|
{
|
||||||
memcpy((f32*)posVtxs, cfGameIconPosVtxs, sizeof(cfGameIconPosVtxs));
|
memcpy((f32*)posVtxs, cfGameIconPosVtxs, sizeof(cfGameIconPosVtxs));
|
||||||
GX2Invalidate(GX2_INVALIDATE_CPU_ATTRIB_BUFFER, (f32*)posVtxs, sizeof(cfGameIconPosVtxs));
|
GX2Invalidate(GX2_INVALIDATE_MODE_CPU_ATTRIBUTE_BUFFER, (f32*)posVtxs, sizeof(cfGameIconPosVtxs));
|
||||||
}
|
}
|
||||||
if(texCoords)
|
if(texCoords)
|
||||||
{
|
{
|
||||||
memcpy((f32*)texCoords, cfGameIconTexCoords, sizeof(cfGameIconTexCoords));
|
memcpy((f32*)texCoords, cfGameIconTexCoords, sizeof(cfGameIconTexCoords));
|
||||||
GX2Invalidate(GX2_INVALIDATE_CPU_ATTRIB_BUFFER, (f32*)texCoords, sizeof(cfGameIconTexCoords));
|
GX2Invalidate(GX2_INVALIDATE_MODE_CPU_ATTRIBUTE_BUFFER, (f32*)texCoords, sizeof(cfGameIconTexCoords));
|
||||||
}
|
}
|
||||||
|
|
||||||
//! create vertexes for the mirror frame
|
//! create vertexes for the mirror frame
|
||||||
@ -59,7 +59,7 @@ GameIcon::GameIcon(const std::string & filename, GuiImageData *preloadImage)
|
|||||||
texCoordsMirror[i*2 + 0] = texCoords[i*2 + 0] * cfIconMirrorScale - ((cfIconMirrorScale - 1.0f) - (cfIconMirrorScale - 1.0f) * 0.5f);
|
texCoordsMirror[i*2 + 0] = texCoords[i*2 + 0] * cfIconMirrorScale - ((cfIconMirrorScale - 1.0f) - (cfIconMirrorScale - 1.0f) * 0.5f);
|
||||||
texCoordsMirror[i*2 + 1] = texCoords[i*2 + 1] * cfIconMirrorScale - ((cfIconMirrorScale - 1.0f) - (cfIconMirrorScale - 1.0f) * 0.5f);
|
texCoordsMirror[i*2 + 1] = texCoords[i*2 + 1] * cfIconMirrorScale - ((cfIconMirrorScale - 1.0f) - (cfIconMirrorScale - 1.0f) * 0.5f);
|
||||||
}
|
}
|
||||||
GX2Invalidate(GX2_INVALIDATE_CPU_ATTRIB_BUFFER, texCoordsMirror, sizeof(cfGameIconTexCoords));
|
GX2Invalidate(GX2_INVALIDATE_MODE_CPU_ATTRIBUTE_BUFFER, texCoordsMirror, sizeof(cfGameIconTexCoords));
|
||||||
}
|
}
|
||||||
|
|
||||||
//! setup stroke of the icon
|
//! setup stroke of the icon
|
||||||
@ -67,7 +67,7 @@ GameIcon::GameIcon(const std::string & filename, GuiImageData *preloadImage)
|
|||||||
if(strokePosVtxs)
|
if(strokePosVtxs)
|
||||||
{
|
{
|
||||||
memcpy(strokePosVtxs, cfGameIconStrokeVtxs, sizeof(cfGameIconStrokeVtxs));
|
memcpy(strokePosVtxs, cfGameIconStrokeVtxs, sizeof(cfGameIconStrokeVtxs));
|
||||||
GX2Invalidate(GX2_INVALIDATE_CPU_ATTRIB_BUFFER, strokePosVtxs, sizeof(cfGameIconStrokeVtxs));
|
GX2Invalidate(GX2_INVALIDATE_MODE_CPU_ATTRIBUTE_BUFFER, strokePosVtxs, sizeof(cfGameIconStrokeVtxs));
|
||||||
}
|
}
|
||||||
strokeTexCoords = (f32*)memalign(GX2_VERTEX_BUFFER_ALIGNMENT, cuGameIconStrokeVtxCount * Shader::cuTexCoordAttrSize);
|
strokeTexCoords = (f32*)memalign(GX2_VERTEX_BUFFER_ALIGNMENT, cuGameIconStrokeVtxCount * Shader::cuTexCoordAttrSize);
|
||||||
if(strokeTexCoords)
|
if(strokeTexCoords)
|
||||||
@ -77,14 +77,14 @@ GameIcon::GameIcon(const std::string & filename, GuiImageData *preloadImage)
|
|||||||
strokeTexCoords[n] = (1.0f + strokePosVtxs[i]) * 0.5f;
|
strokeTexCoords[n] = (1.0f + strokePosVtxs[i]) * 0.5f;
|
||||||
strokeTexCoords[n+1] = 1.0f - (1.0f + strokePosVtxs[i+1]) * 0.5f;
|
strokeTexCoords[n+1] = 1.0f - (1.0f + strokePosVtxs[i+1]) * 0.5f;
|
||||||
}
|
}
|
||||||
GX2Invalidate(GX2_INVALIDATE_CPU_ATTRIB_BUFFER, strokeTexCoords, cuGameIconStrokeVtxCount * Shader::cuTexCoordAttrSize);
|
GX2Invalidate(GX2_INVALIDATE_MODE_CPU_ATTRIBUTE_BUFFER, strokeTexCoords, cuGameIconStrokeVtxCount * Shader::cuTexCoordAttrSize);
|
||||||
}
|
}
|
||||||
strokeColorVtxs = (u8*)memalign(GX2_VERTEX_BUFFER_ALIGNMENT, cuGameIconStrokeVtxCount * Shader::cuColorAttrSize);
|
strokeColorVtxs = (u8*)memalign(GX2_VERTEX_BUFFER_ALIGNMENT, cuGameIconStrokeVtxCount * Shader::cuColorAttrSize);
|
||||||
if(strokeColorVtxs)
|
if(strokeColorVtxs)
|
||||||
{
|
{
|
||||||
for(size_t i = 0; i < (cuGameIconStrokeVtxCount * Shader::cuColorAttrSize); i++)
|
for(size_t i = 0; i < (cuGameIconStrokeVtxCount * Shader::cuColorAttrSize); i++)
|
||||||
strokeColorVtxs[i] = 0xff;
|
strokeColorVtxs[i] = 0xff;
|
||||||
GX2Invalidate(GX2_INVALIDATE_CPU_ATTRIB_BUFFER, strokeColorVtxs, cuGameIconStrokeVtxCount * Shader::cuColorAttrSize);
|
GX2Invalidate(GX2_INVALIDATE_MODE_CPU_ATTRIBUTE_BUFFER, strokeColorVtxs, cuGameIconStrokeVtxCount * Shader::cuColorAttrSize);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -236,14 +236,14 @@ void GameIcon::draw(CVideo *pVideo, const glm::mat4 & projectionMtx, const glm::
|
|||||||
Shader3D::instance()->setModelViewMtx(m_iconView);
|
Shader3D::instance()->setModelViewMtx(m_iconView);
|
||||||
Shader3D::instance()->setColorIntensity(colorIntensity);
|
Shader3D::instance()->setColorIntensity(colorIntensity);
|
||||||
Shader3D::instance()->setAttributeBuffer(vtxCount, posVtxs, texCoords);
|
Shader3D::instance()->setAttributeBuffer(vtxCount, posVtxs, texCoords);
|
||||||
Shader3D::instance()->draw(GX2_PRIMITIVE_QUADS, vtxCount);
|
Shader3D::instance()->draw(GX2_PRIMITIVE_MODE_QUADS, vtxCount);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(bSelected)
|
if(bSelected)
|
||||||
{
|
{
|
||||||
strokeFractalEnable = 0;
|
strokeFractalEnable = 0;
|
||||||
|
|
||||||
GX2SetDepthOnlyControl(GX2_ENABLE, GX2_DISABLE, GX2_COMPARE_LEQUAL);
|
GX2SetDepthOnlyControl(GX2_ENABLE, GX2_DISABLE, GX2_COMPARE_FUNC_LEQUAL);
|
||||||
m_strokeView = glm::scale(m_iconView, glm::vec3(selectionBlurOuterSize, selectionBlurOuterSize, 0.0f));
|
m_strokeView = glm::scale(m_iconView, glm::vec3(selectionBlurOuterSize, selectionBlurOuterSize, 0.0f));
|
||||||
ShaderFractalColor::instance()->setShaders();
|
ShaderFractalColor::instance()->setShaders();
|
||||||
ShaderFractalColor::instance()->setProjectionMtx(projectionMtx);
|
ShaderFractalColor::instance()->setProjectionMtx(projectionMtx);
|
||||||
@ -260,7 +260,7 @@ void GameIcon::draw(CVideo *pVideo, const glm::mat4 & projectionMtx, const glm::
|
|||||||
ShaderFractalColor::instance()->setBlurBorder(selectionBlurInnerBorderSize);
|
ShaderFractalColor::instance()->setBlurBorder(selectionBlurInnerBorderSize);
|
||||||
ShaderFractalColor::instance()->setColorIntensity(selectionBlurInnerColorIntensity);
|
ShaderFractalColor::instance()->setColorIntensity(selectionBlurInnerColorIntensity);
|
||||||
ShaderFractalColor::instance()->draw();
|
ShaderFractalColor::instance()->draw();
|
||||||
GX2SetDepthOnlyControl(GX2_ENABLE, GX2_ENABLE, GX2_COMPARE_LEQUAL);
|
GX2SetDepthOnlyControl(GX2_ENABLE, GX2_ENABLE, GX2_COMPARE_FUNC_LEQUAL);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(iDraw == RENDER_NORMAL && bRenderStroke)
|
if(iDraw == RENDER_NORMAL && bRenderStroke)
|
||||||
@ -280,7 +280,7 @@ void GameIcon::draw(CVideo *pVideo, const glm::mat4 & projectionMtx, const glm::
|
|||||||
ShaderFractalColor::instance()->setColorIntensity(colorIntensity);
|
ShaderFractalColor::instance()->setColorIntensity(colorIntensity);
|
||||||
ShaderFractalColor::instance()->setAlphaFadeOut(*alphaFadeOut);
|
ShaderFractalColor::instance()->setAlphaFadeOut(*alphaFadeOut);
|
||||||
ShaderFractalColor::instance()->setAttributeBuffer(cuGameIconStrokeVtxCount, strokePosVtxs, strokeTexCoords, strokeColorVtxs);
|
ShaderFractalColor::instance()->setAttributeBuffer(cuGameIconStrokeVtxCount, strokePosVtxs, strokeTexCoords, strokeColorVtxs);
|
||||||
ShaderFractalColor::instance()->draw(GX2_PRIMITIVE_LINE_STRIP, cuGameIconStrokeVtxCount);
|
ShaderFractalColor::instance()->draw(GX2_PRIMITIVE_MODE_LINE_STRIP, cuGameIconStrokeVtxCount);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -294,7 +294,7 @@ void GameIcon::draw(CVideo *pVideo, const glm::mat4 & projectionMtx, const glm::
|
|||||||
Shader3D::instance()->setModelViewMtx(m_mirrorView);
|
Shader3D::instance()->setModelViewMtx(m_mirrorView);
|
||||||
Shader3D::instance()->setColorIntensity(colorIntensityMirror);
|
Shader3D::instance()->setColorIntensity(colorIntensityMirror);
|
||||||
Shader3D::instance()->setAttributeBuffer(vtxCount, posVtxs, texCoordsMirror);
|
Shader3D::instance()->setAttributeBuffer(vtxCount, posVtxs, texCoordsMirror);
|
||||||
Shader3D::instance()->draw(GX2_PRIMITIVE_QUADS, vtxCount);
|
Shader3D::instance()->draw(GX2_PRIMITIVE_MODE_QUADS, vtxCount);
|
||||||
|
|
||||||
if(bIconLast)
|
if(bIconLast)
|
||||||
{
|
{
|
||||||
@ -309,7 +309,7 @@ void GameIcon::draw(CVideo *pVideo, const glm::mat4 & projectionMtx, const glm::
|
|||||||
Shader3D::instance()->setModelViewMtx(m_iconView);
|
Shader3D::instance()->setModelViewMtx(m_iconView);
|
||||||
Shader3D::instance()->setColorIntensity(colorIntensity);
|
Shader3D::instance()->setColorIntensity(colorIntensity);
|
||||||
Shader3D::instance()->setAttributeBuffer(vtxCount, posVtxs, texCoords);
|
Shader3D::instance()->setAttributeBuffer(vtxCount, posVtxs, texCoords);
|
||||||
Shader3D::instance()->draw(GX2_PRIMITIVE_QUADS, vtxCount);
|
Shader3D::instance()->draw(GX2_PRIMITIVE_MODE_QUADS, vtxCount);
|
||||||
}
|
}
|
||||||
|
|
||||||
//! return back normal culling
|
//! return back normal culling
|
||||||
|
@ -25,7 +25,7 @@ GridBackground::GridBackground(GuiImageData *img)
|
|||||||
m_posVtxs[i++] = 1.0f; m_posVtxs[i++] = 0.0f; m_posVtxs[i++] = 1.0f;
|
m_posVtxs[i++] = 1.0f; m_posVtxs[i++] = 0.0f; m_posVtxs[i++] = 1.0f;
|
||||||
m_posVtxs[i++] = 1.0f; m_posVtxs[i++] = 0.0f; m_posVtxs[i++] = -1.0f;
|
m_posVtxs[i++] = 1.0f; m_posVtxs[i++] = 0.0f; m_posVtxs[i++] = -1.0f;
|
||||||
m_posVtxs[i++] = -1.0f; m_posVtxs[i++] = 0.0f; m_posVtxs[i++] = -1.0f;
|
m_posVtxs[i++] = -1.0f; m_posVtxs[i++] = 0.0f; m_posVtxs[i++] = -1.0f;
|
||||||
GX2Invalidate(GX2_INVALIDATE_CPU_ATTRIB_BUFFER, m_posVtxs, vtxCount * Shader3D::cuVertexAttrSize);
|
GX2Invalidate(GX2_INVALIDATE_MODE_CPU_ATTRIBUTE_BUFFER, m_posVtxs, vtxCount * Shader3D::cuVertexAttrSize);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(m_texCoords)
|
if(m_texCoords)
|
||||||
@ -50,7 +50,7 @@ GridBackground::GridBackground(GuiImageData *img)
|
|||||||
m_texCoords[i*2 + 1] = texCoordVec[i][1];
|
m_texCoords[i*2 + 1] = texCoordVec[i][1];
|
||||||
}
|
}
|
||||||
|
|
||||||
GX2Invalidate(GX2_INVALIDATE_CPU_ATTRIB_BUFFER, m_texCoords, vtxCount * Shader3D::cuTexCoordAttrSize);
|
GX2Invalidate(GX2_INVALIDATE_MODE_CPU_ATTRIBUTE_BUFFER, m_texCoords, vtxCount * Shader3D::cuTexCoordAttrSize);
|
||||||
}
|
}
|
||||||
|
|
||||||
//! assign to internal variables which are const but oh well
|
//! assign to internal variables which are const but oh well
|
||||||
@ -96,5 +96,5 @@ void GridBackground::draw(CVideo *pVideo, const glm::mat4 & modelView)
|
|||||||
Shader3D::instance()->setAlphaFadeOut(alphaFadeOut);
|
Shader3D::instance()->setAlphaFadeOut(alphaFadeOut);
|
||||||
Shader3D::instance()->setColorIntensity(colorIntensity);
|
Shader3D::instance()->setColorIntensity(colorIntensity);
|
||||||
Shader3D::instance()->setAttributeBuffer(vtxCount, posVtxs, texCoords);
|
Shader3D::instance()->setAttributeBuffer(vtxCount, posVtxs, texCoords);
|
||||||
Shader3D::instance()->draw(GX2_PRIMITIVE_QUADS, vtxCount);
|
Shader3D::instance()->draw(GX2_PRIMITIVE_MODE_QUADS, vtxCount);
|
||||||
}
|
}
|
||||||
|
@ -15,7 +15,6 @@
|
|||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
#include "GuiButton.h"
|
#include "GuiButton.h"
|
||||||
#include "GuiTrigger.h"
|
|
||||||
#include "GuiController.h"
|
#include "GuiController.h"
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -162,14 +161,12 @@ void GuiButton::draw(CVideo *v)
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
// draw image
|
// draw image
|
||||||
if((isDrawOverOnlyWhenSelected() && (isStateSet(STATE_SELECTED) && imageOver)) ||
|
if(isStateSet(STATE_OVER | STATE_SELECTED | STATE_CLICKED | STATE_HELD) && imageOver)
|
||||||
(!isDrawOverOnlyWhenSelected() && (isStateSet(STATE_OVER | STATE_SELECTED | STATE_CLICKED | STATE_HELD) && imageOver)))
|
|
||||||
imageOver->draw(v);
|
imageOver->draw(v);
|
||||||
else if(image)
|
else if(image)
|
||||||
image->draw(v);
|
image->draw(v);
|
||||||
|
|
||||||
if((isDrawOverOnlyWhenSelected() && (isStateSet(STATE_SELECTED) && iconOver)) ||
|
if(isStateSet(STATE_OVER | STATE_SELECTED | STATE_CLICKED | STATE_HELD) && iconOver)
|
||||||
(!isDrawOverOnlyWhenSelected() && (isStateSet(STATE_OVER | STATE_SELECTED | STATE_CLICKED | STATE_HELD) && iconOver)))
|
|
||||||
iconOver->draw(v);
|
iconOver->draw(v);
|
||||||
else if(icon)
|
else if(icon)
|
||||||
icon->draw(v);
|
icon->draw(v);
|
||||||
@ -186,9 +183,9 @@ void GuiButton::draw(CVideo *v)
|
|||||||
|
|
||||||
void GuiButton::update(GuiController * c)
|
void GuiButton::update(GuiController * c)
|
||||||
{
|
{
|
||||||
if(!c || isStateSet(STATE_DISABLED|STATE_HIDDEN|STATE_DISABLE_INPUT, c->chan))
|
if(!c || isStateSet(STATE_DISABLED, c->chan) || isStateSet(STATE_HIDDEN, c->chan))
|
||||||
return;
|
return;
|
||||||
else if(parentElement && (parentElement->isStateSet(STATE_DISABLED|STATE_HIDDEN|STATE_DISABLE_INPUT, c->chan)))
|
else if(parentElement && (parentElement->isStateSet(STATE_DISABLED, c->chan) || parentElement->isStateSet(STATE_HIDDEN, c->chan)))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if(selectable)
|
if(selectable)
|
||||||
@ -239,10 +236,9 @@ void GuiButton::update(GuiController * c)
|
|||||||
// button triggers
|
// button triggers
|
||||||
if(clickable)
|
if(clickable)
|
||||||
{
|
{
|
||||||
|
bool isClicked = trigger[i]->clicked(c);
|
||||||
|
|
||||||
int isClicked = trigger[i]->clicked(c);
|
if( !clickedTrigger && isClicked
|
||||||
|
|
||||||
if( !clickedTrigger && (isClicked != GuiTrigger::CLICKED_NONE)
|
|
||||||
&& (trigger[i]->isClickEverywhere() || (isStateSet(STATE_SELECTED | STATE_OVER, c->chan) && trigger[i]->isSelectionClickEverywhere()) || this->isInside(c->data.x, c->data.y)))
|
&& (trigger[i]->isClickEverywhere() || (isStateSet(STATE_SELECTED | STATE_OVER, c->chan) && trigger[i]->isSelectionClickEverywhere()) || this->isInside(c->data.x, c->data.y)))
|
||||||
{
|
{
|
||||||
if(soundClick)
|
if(soundClick)
|
||||||
@ -250,23 +246,16 @@ void GuiButton::update(GuiController * c)
|
|||||||
|
|
||||||
clickedTrigger = trigger[i];
|
clickedTrigger = trigger[i];
|
||||||
|
|
||||||
if(!isStateSet(STATE_CLICKED, c->chan)){
|
if(!isStateSet(STATE_CLICKED, c->chan))
|
||||||
if(isClicked == GuiTrigger::CLICKED_TOUCH){
|
setState(STATE_CLICKED, c->chan);
|
||||||
setState(STATE_CLICKED_TOUCH, c->chan);
|
|
||||||
}else{
|
|
||||||
setState(STATE_CLICKED, c->chan);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
clicked(this, c, trigger[i]);
|
clicked(this, c, trigger[i]);
|
||||||
}
|
}
|
||||||
else if((isStateSet(STATE_CLICKED, c->chan) || isStateSet(STATE_CLICKED_TOUCH, c->chan)) && (clickedTrigger == trigger[i]) && !isStateSet(STATE_HELD, c->chan) && !trigger[i]->held(c) && ((isClicked == GuiTrigger::CLICKED_NONE) || trigger[i]->released(c)))
|
else if(isStateSet(STATE_CLICKED, c->chan) && (clickedTrigger == trigger[i]) && !isStateSet(STATE_HELD, c->chan) && !trigger[i]->held(c) && (!isClicked || trigger[i]->released(c)))
|
||||||
{
|
{
|
||||||
if((isStateSet(STATE_CLICKED_TOUCH, c->chan) && this->isInside(c->data.x, c->data.y)) || (isStateSet(STATE_CLICKED, c->chan))){
|
clickedTrigger = NULL;
|
||||||
clickedTrigger = NULL;
|
clearState(STATE_CLICKED, c->chan);
|
||||||
clearState(STATE_CLICKED, c->chan);
|
released(this, c, trigger[i]);
|
||||||
released(this, c, trigger[i]);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -85,7 +85,7 @@ class GuiButton : public GuiElement
|
|||||||
//!Constantly called to allow the GuiButton to respond to updated input data
|
//!Constantly called to allow the GuiButton to respond to updated input data
|
||||||
//!\param t Pointer to a GuiTrigger, containing the current input data from PAD/WPAD
|
//!\param t Pointer to a GuiTrigger, containing the current input data from PAD/WPAD
|
||||||
void update(GuiController * c);
|
void update(GuiController * c);
|
||||||
|
|
||||||
sigslot::signal2<GuiButton *, const GuiController *> selected;
|
sigslot::signal2<GuiButton *, const GuiController *> selected;
|
||||||
sigslot::signal2<GuiButton *, const GuiController *> deSelected;
|
sigslot::signal2<GuiButton *, const GuiController *> deSelected;
|
||||||
sigslot::signal2<GuiButton *, const GuiController *> pointedOn;
|
sigslot::signal2<GuiButton *, const GuiController *> pointedOn;
|
||||||
@ -94,7 +94,7 @@ class GuiButton : public GuiElement
|
|||||||
sigslot::signal3<GuiButton *, const GuiController *, GuiTrigger *> held;
|
sigslot::signal3<GuiButton *, const GuiController *, GuiTrigger *> held;
|
||||||
sigslot::signal3<GuiButton *, const GuiController *, GuiTrigger *> released;
|
sigslot::signal3<GuiButton *, const GuiController *, GuiTrigger *> released;
|
||||||
protected:
|
protected:
|
||||||
static const int iMaxGuiTriggers = 10;
|
static const int iMaxGuiTriggers = 7;
|
||||||
|
|
||||||
GuiImage * image; //!< Button image (default)
|
GuiImage * image; //!< Button image (default)
|
||||||
GuiImage * imageOver; //!< Button image for STATE_SELECTED
|
GuiImage * imageOver; //!< Button image for STATE_SELECTED
|
||||||
|
@ -42,7 +42,6 @@ GuiElement::GuiElement()
|
|||||||
selectable = false;
|
selectable = false;
|
||||||
clickable = false;
|
clickable = false;
|
||||||
holdable = false;
|
holdable = false;
|
||||||
drawOverOnlyWhenSelected = false;
|
|
||||||
visible = true;
|
visible = true;
|
||||||
yoffsetDyn = 0;
|
yoffsetDyn = 0;
|
||||||
xoffsetDyn = 0;
|
xoffsetDyn = 0;
|
||||||
|
@ -19,7 +19,6 @@
|
|||||||
|
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
#include <gctypes.h>
|
|
||||||
#include <malloc.h>
|
#include <malloc.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
@ -28,11 +27,11 @@
|
|||||||
#include <wchar.h>
|
#include <wchar.h>
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
|
|
||||||
|
#include "common/types.h"
|
||||||
#include "sigslot.h"
|
#include "sigslot.h"
|
||||||
#include "glm/glm.hpp"
|
#include "glm/glm.hpp"
|
||||||
#include "glm/gtc/matrix_transform.hpp"
|
#include "glm/gtc/matrix_transform.hpp"
|
||||||
|
|
||||||
#include "dynamic_libs/gx2_types.h"
|
|
||||||
#include "resources/Resources.h"
|
#include "resources/Resources.h"
|
||||||
#include "system/AsyncDeleter.h"
|
#include "system/AsyncDeleter.h"
|
||||||
#include "utils/logger.h"
|
#include "utils/logger.h"
|
||||||
|
@ -51,9 +51,16 @@ void GuiFrame::append(GuiElement* e)
|
|||||||
if (e == NULL)
|
if (e == NULL)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
remove(e);
|
e->setParent(this);
|
||||||
elements.push_back(e);
|
|
||||||
e->setParent(this);
|
ListChangeElement elem;
|
||||||
|
elem.addElement = true;
|
||||||
|
elem.position = -1;
|
||||||
|
elem.element = e;
|
||||||
|
|
||||||
|
queueMutex.lock();
|
||||||
|
listChangeQueue.push(elem);
|
||||||
|
queueMutex.unlock();
|
||||||
}
|
}
|
||||||
|
|
||||||
void GuiFrame::insert(GuiElement* e, u32 index)
|
void GuiFrame::insert(GuiElement* e, u32 index)
|
||||||
@ -61,9 +68,16 @@ void GuiFrame::insert(GuiElement* e, u32 index)
|
|||||||
if (e == NULL || (index >= elements.size()))
|
if (e == NULL || (index >= elements.size()))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
remove(e);
|
e->setParent(this);
|
||||||
elements.insert(elements.begin()+index, e);
|
|
||||||
e->setParent(this);
|
ListChangeElement elem;
|
||||||
|
elem.addElement = true;
|
||||||
|
elem.position = index;
|
||||||
|
elem.element = e;
|
||||||
|
|
||||||
|
queueMutex.lock();
|
||||||
|
listChangeQueue.push(elem);
|
||||||
|
queueMutex.unlock();
|
||||||
}
|
}
|
||||||
|
|
||||||
void GuiFrame::remove(GuiElement* e)
|
void GuiFrame::remove(GuiElement* e)
|
||||||
@ -71,14 +85,14 @@ void GuiFrame::remove(GuiElement* e)
|
|||||||
if (e == NULL)
|
if (e == NULL)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
for (u32 i = 0; i < elements.size(); ++i)
|
ListChangeElement elem;
|
||||||
{
|
elem.addElement = false;
|
||||||
if(e == elements[i])
|
elem.position = -1;
|
||||||
{
|
elem.element = e;
|
||||||
elements.erase(elements.begin()+i);
|
|
||||||
break;
|
queueMutex.lock();
|
||||||
}
|
listChangeQueue.push(elem);
|
||||||
}
|
queueMutex.unlock();
|
||||||
}
|
}
|
||||||
|
|
||||||
void GuiFrame::removeAll()
|
void GuiFrame::removeAll()
|
||||||
@ -185,34 +199,21 @@ void GuiFrame::draw(CVideo * v)
|
|||||||
|
|
||||||
void GuiFrame::updateEffects()
|
void GuiFrame::updateEffects()
|
||||||
{
|
{
|
||||||
if(!this->isVisible() && parentElement)
|
if(this->isVisible() || parentElement)
|
||||||
return;
|
{
|
||||||
|
GuiElement::updateEffects();
|
||||||
|
|
||||||
GuiElement::updateEffects();
|
//! render appended items next frame but allow stop of render if size is reached
|
||||||
|
u32 size = elements.size();
|
||||||
|
|
||||||
//! render appended items next frame but allow stop of render if size is reached
|
for (u32 i = 0; i < size && i < elements.size(); ++i)
|
||||||
u32 size = elements.size();
|
{
|
||||||
|
elements[i]->updateEffects();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
for (u32 i = 0; i < size && i < elements.size(); ++i)
|
//! at the end of main loop which this function represents append pending elements
|
||||||
{
|
updateElementList();
|
||||||
elements[i]->updateEffects();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void GuiFrame::process()
|
|
||||||
{
|
|
||||||
if(!this->isVisible() && parentElement)
|
|
||||||
return;
|
|
||||||
|
|
||||||
GuiElement::process();
|
|
||||||
|
|
||||||
//! render appended items next frame but allow stop of render if size is reached
|
|
||||||
u32 size = elements.size();
|
|
||||||
|
|
||||||
for (u32 i = 0; i < size && i < elements.size(); ++i)
|
|
||||||
{
|
|
||||||
elements[i]->process();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void GuiFrame::update(GuiController * c)
|
void GuiFrame::update(GuiController * c)
|
||||||
@ -228,3 +229,39 @@ void GuiFrame::update(GuiController * c)
|
|||||||
elements[i]->update(c);
|
elements[i]->update(c);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void GuiFrame::updateElementList(void)
|
||||||
|
{
|
||||||
|
if(listChangeQueue.empty() == false)
|
||||||
|
{
|
||||||
|
queueMutex.lock();
|
||||||
|
while(!listChangeQueue.empty())
|
||||||
|
{
|
||||||
|
ListChangeElement & listChange = listChangeQueue.front();
|
||||||
|
|
||||||
|
for (u32 i = 0; i < elements.size(); ++i)
|
||||||
|
{
|
||||||
|
if(listChange.element == elements[i])
|
||||||
|
{
|
||||||
|
elements.erase(elements.begin()+i);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(listChange.addElement)
|
||||||
|
{
|
||||||
|
if(listChange.position >= 0)
|
||||||
|
{
|
||||||
|
elements.insert(elements.begin()+listChange.position, listChange.element);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
elements.push_back(listChange.element);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
listChangeQueue.pop();
|
||||||
|
}
|
||||||
|
queueMutex.unlock();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
@ -84,8 +84,6 @@ class GuiFrame : public GuiElement
|
|||||||
virtual void exec() {}
|
virtual void exec() {}
|
||||||
//!virtual updateEffects which is called by the main loop
|
//!virtual updateEffects which is called by the main loop
|
||||||
virtual void updateEffects();
|
virtual void updateEffects();
|
||||||
//!virtual process which is called by the main loop
|
|
||||||
virtual void process();
|
|
||||||
//! Signals
|
//! Signals
|
||||||
//! On Closing
|
//! On Closing
|
||||||
sigslot::signal1<GuiFrame *> closing;
|
sigslot::signal1<GuiFrame *> closing;
|
||||||
@ -93,6 +91,17 @@ class GuiFrame : public GuiElement
|
|||||||
bool dim; //! Enable/disable dim of a window only
|
bool dim; //! Enable/disable dim of a window only
|
||||||
GuiFrame *parent; //!< Parent Window
|
GuiFrame *parent; //!< Parent Window
|
||||||
std::vector<GuiElement*> elements; //!< Contains all elements within the GuiFrame
|
std::vector<GuiElement*> elements; //!< Contains all elements within the GuiFrame
|
||||||
|
|
||||||
|
void updateElementList(void);
|
||||||
|
|
||||||
|
struct ListChangeElement
|
||||||
|
{
|
||||||
|
bool addElement;
|
||||||
|
int position;
|
||||||
|
GuiElement *element;
|
||||||
|
};
|
||||||
|
std::queue<ListChangeElement> listChangeQueue;
|
||||||
|
CMutex queueMutex;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -92,7 +92,7 @@ void GuiImage::internalInit(int w, int h)
|
|||||||
posVtxs = NULL;
|
posVtxs = NULL;
|
||||||
texCoords = NULL;
|
texCoords = NULL;
|
||||||
vtxCount = 4;
|
vtxCount = 4;
|
||||||
primitive = GX2_PRIMITIVE_QUADS;
|
primitive = GX2_PRIMITIVE_MODE_QUADS;
|
||||||
|
|
||||||
imageAngle = 0.0f;
|
imageAngle = 0.0f;
|
||||||
blurDirection = glm::vec3(0.0f);
|
blurDirection = glm::vec3(0.0f);
|
||||||
@ -120,7 +120,7 @@ GX2Color GuiImage::getPixel(int x, int y)
|
|||||||
return (GX2Color){0, 0, 0, 0};
|
return (GX2Color){0, 0, 0, 0};
|
||||||
|
|
||||||
u32 pitch = imageData->getTexture()->surface.pitch;
|
u32 pitch = imageData->getTexture()->surface.pitch;
|
||||||
u32 *imagePtr = (u32*)imageData->getTexture()->surface.image_data;
|
u32 *imagePtr = (u32*)imageData->getTexture()->surface.image;
|
||||||
|
|
||||||
u32 color_u32 = imagePtr[y * pitch + x];
|
u32 color_u32 = imagePtr[y * pitch + x];
|
||||||
GX2Color color;
|
GX2Color color;
|
||||||
@ -138,7 +138,7 @@ void GuiImage::setPixel(int x, int y, const GX2Color & color)
|
|||||||
|
|
||||||
|
|
||||||
u32 pitch = imageData->getTexture()->surface.pitch;
|
u32 pitch = imageData->getTexture()->surface.pitch;
|
||||||
u32 *imagePtr = (u32*)imageData->getTexture()->surface.image_data;
|
u32 *imagePtr = (u32*)imageData->getTexture()->surface.image;
|
||||||
imagePtr[y * pitch + x] = (color.r << 24) | (color.g << 16) | (color.b << 8) | (color.a << 0);
|
imagePtr[y * pitch + x] = (color.r << 24) | (color.g << 16) | (color.b << 8) | (color.a << 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -260,7 +260,7 @@ void GuiImage::draw(CVideo *pVideo)
|
|||||||
// }
|
// }
|
||||||
if(colorVtxsDirty && colorVtxs) {
|
if(colorVtxsDirty && colorVtxs) {
|
||||||
//! flush color vertex only on main GX2 thread
|
//! flush color vertex only on main GX2 thread
|
||||||
GX2Invalidate(GX2_INVALIDATE_CPU_ATTRIB_BUFFER, colorVtxs, colorCount * ColorShader::cuColorAttrSize);
|
GX2Invalidate(GX2_INVALIDATE_MODE_CPU_ATTRIBUTE_BUFFER, colorVtxs, colorCount * ColorShader::cuColorAttrSize);
|
||||||
colorVtxsDirty = false;
|
colorVtxsDirty = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -55,7 +55,7 @@ GuiImageAsync::~GuiImageAsync()
|
|||||||
if (imgData)
|
if (imgData)
|
||||||
delete imgData;
|
delete imgData;
|
||||||
|
|
||||||
//threadExit();
|
threadExit();
|
||||||
}
|
}
|
||||||
|
|
||||||
void GuiImageAsync::threadAddImage(GuiImageAsync *Image)
|
void GuiImageAsync::threadAddImage(GuiImageAsync *Image)
|
||||||
@ -117,7 +117,7 @@ void GuiImageAsync::guiImageAsyncThread(CThread *thread, void *arg)
|
|||||||
int iResult = LoadFileToMem(pInUse->filename.c_str(), &buffer, &bufferSize);
|
int iResult = LoadFileToMem(pInUse->filename.c_str(), &buffer, &bufferSize);
|
||||||
if(iResult > 0)
|
if(iResult > 0)
|
||||||
{
|
{
|
||||||
pInUse->imgData = new GuiImageData(buffer, bufferSize, GX2_TEX_CLAMP_MIRROR);
|
pInUse->imgData = new GuiImageData(buffer, bufferSize, GX2_TEX_CLAMP_MODE_MIRROR);
|
||||||
|
|
||||||
//! free original image buffer which is converted to texture now and not needed anymore
|
//! free original image buffer which is converted to texture now and not needed anymore
|
||||||
free(buffer);
|
free(buffer);
|
||||||
@ -138,7 +138,7 @@ void GuiImageAsync::guiImageAsyncThread(CThread *thread, void *arg)
|
|||||||
pInUse->imgData = NULL;
|
pInUse->imgData = NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
pInUse->imageLoaded(pInUse);
|
|
||||||
pInUse = NULL;
|
pInUse = NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -159,10 +159,9 @@ void GuiImageAsync::threadInit()
|
|||||||
|
|
||||||
void GuiImageAsync::threadExit()
|
void GuiImageAsync::threadExit()
|
||||||
{
|
{
|
||||||
if(threadRefCounter)
|
--threadRefCounter;
|
||||||
--threadRefCounter;
|
|
||||||
|
|
||||||
if(/*(threadRefCounter == 0) &&*/ (pThread != NULL))
|
if((threadRefCounter == 0) && (pThread != NULL))
|
||||||
{
|
{
|
||||||
bExitRequested = true;
|
bExitRequested = true;
|
||||||
delete pThread;
|
delete pThread;
|
||||||
|
@ -21,7 +21,6 @@
|
|||||||
#include "GuiImage.h"
|
#include "GuiImage.h"
|
||||||
#include "system/CThread.h"
|
#include "system/CThread.h"
|
||||||
#include "system/CMutex.h"
|
#include "system/CMutex.h"
|
||||||
#include "dynamic_libs/os_functions.h"
|
|
||||||
|
|
||||||
class GuiImageAsync : public GuiImage
|
class GuiImageAsync : public GuiImage
|
||||||
{
|
{
|
||||||
@ -34,13 +33,9 @@ class GuiImageAsync : public GuiImage
|
|||||||
static void removeFromQueue(GuiImageAsync * image) {
|
static void removeFromQueue(GuiImageAsync * image) {
|
||||||
threadRemoveImage(image);
|
threadRemoveImage(image);
|
||||||
}
|
}
|
||||||
|
|
||||||
//! don't forget to LOCK GUI if using this asynchron call
|
|
||||||
sigslot::signal1<GuiImageAsync *> imageLoaded;
|
|
||||||
static void threadExit();
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
static void threadInit();
|
static void threadInit();
|
||||||
|
static void threadExit();
|
||||||
|
|
||||||
GuiImageData *imgData;
|
GuiImageData *imgData;
|
||||||
std::string filename;
|
std::string filename;
|
||||||
|
@ -18,6 +18,8 @@
|
|||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include "GuiImageData.h"
|
#include "GuiImageData.h"
|
||||||
#include "system/memory.h"
|
#include "system/memory.h"
|
||||||
|
#include "video/CVideo.h"
|
||||||
|
#include "common/gx2_ext.h"
|
||||||
/**
|
/**
|
||||||
* Constructor for the GuiImageData class.
|
* Constructor for the GuiImageData class.
|
||||||
*/
|
*/
|
||||||
@ -31,7 +33,7 @@ GuiImageData::GuiImageData()
|
|||||||
/**
|
/**
|
||||||
* Constructor for the GuiImageData class.
|
* Constructor for the GuiImageData class.
|
||||||
*/
|
*/
|
||||||
GuiImageData::GuiImageData(const u8 * img, int imgSize, int textureClamp, int textureFormat)
|
GuiImageData::GuiImageData(const u8 * img, int imgSize, GX2TexClampMode textureClamp, GX2SurfaceFormat textureFormat)
|
||||||
{
|
{
|
||||||
texture = NULL;
|
texture = NULL;
|
||||||
sampler = NULL;
|
sampler = NULL;
|
||||||
@ -49,19 +51,19 @@ GuiImageData::~GuiImageData()
|
|||||||
void GuiImageData::releaseData(void)
|
void GuiImageData::releaseData(void)
|
||||||
{
|
{
|
||||||
if(texture) {
|
if(texture) {
|
||||||
if(texture->surface.image_data)
|
if(texture->surface.image)
|
||||||
{
|
{
|
||||||
switch(memoryType)
|
switch(memoryType)
|
||||||
{
|
{
|
||||||
default:
|
default:
|
||||||
case eMemTypeMEM2:
|
case eMemTypeMEM2:
|
||||||
free(texture->surface.image_data);
|
free(texture->surface.image);
|
||||||
break;
|
break;
|
||||||
case eMemTypeMEM1:
|
case eMemTypeMEM1:
|
||||||
MEM1_free(texture->surface.image_data);
|
MEM1_free(texture->surface.image);
|
||||||
break;
|
break;
|
||||||
case eMemTypeMEMBucket:
|
case eMemTypeMEMBucket:
|
||||||
MEMBucket_free(texture->surface.image_data);
|
MEMBucket_free(texture->surface.image);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -74,7 +76,7 @@ void GuiImageData::releaseData(void)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void GuiImageData::loadImage(const u8 *img, int imgSize, int textureClamp, int textureFormat)
|
void GuiImageData::loadImage(const u8 *img, int imgSize, GX2TexClampMode textureClamp, GX2SurfaceFormat textureFormat)
|
||||||
{
|
{
|
||||||
if(!img || (imgSize < 8))
|
if(!img || (imgSize < 8))
|
||||||
return;
|
return;
|
||||||
@ -87,12 +89,12 @@ void GuiImageData::loadImage(const u8 *img, int imgSize, int textureClamp, int t
|
|||||||
//! not needed for now therefore comment out to safe ELF size
|
//! not needed for now therefore comment out to safe ELF size
|
||||||
//! if needed uncomment, adds 200 kb to the ELF size
|
//! if needed uncomment, adds 200 kb to the ELF size
|
||||||
// IMAGE_JPEG
|
// IMAGE_JPEG
|
||||||
gdImg = gdImageCreateFromJpegPtr(imgSize, (u8*) img);
|
//gdImg = gdImageCreateFromJpegPtr(imgSize, (u8*) img);
|
||||||
}
|
}
|
||||||
else if (img[0] == 'B' && img[1] == 'M')
|
else if (img[0] == 'B' && img[1] == 'M')
|
||||||
{
|
{
|
||||||
// IMAGE_BMP
|
// IMAGE_BMP
|
||||||
gdImg = gdImageCreateFromBmpPtr(imgSize, (u8*) img);
|
//gdImg = gdImageCreateFromBmpPtr(imgSize, (u8*) img);
|
||||||
}
|
}
|
||||||
else if (img[0] == 0x89 && img[1] == 'P' && img[2] == 'N' && img[3] == 'G')
|
else if (img[0] == 0x89 && img[1] == 'P' && img[2] == 'N' && img[3] == 'G')
|
||||||
{
|
{
|
||||||
@ -103,7 +105,7 @@ void GuiImageData::loadImage(const u8 *img, int imgSize, int textureClamp, int t
|
|||||||
else if(img[0] == 0x00)
|
else if(img[0] == 0x00)
|
||||||
{
|
{
|
||||||
// Try loading TGA image
|
// Try loading TGA image
|
||||||
gdImg = gdImageCreateFromTgaPtr(imgSize, (u8*) img);
|
//gdImg = gdImageCreateFromTgaPtr(imgSize, (u8*) img);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(gdImg == 0)
|
if(gdImg == 0)
|
||||||
@ -114,10 +116,10 @@ void GuiImageData::loadImage(const u8 *img, int imgSize, int textureClamp, int t
|
|||||||
|
|
||||||
//! Initialize texture
|
//! Initialize texture
|
||||||
texture = new GX2Texture;
|
texture = new GX2Texture;
|
||||||
GX2InitTexture(texture, width, height, 1, 0, textureFormat, GX2_SURFACE_DIM_2D, GX2_TILE_MODE_LINEAR_ALIGNED);
|
GX2InitTexture(texture, width, height, 1, 0, textureFormat, GX2_SURFACE_DIM_TEXTURE_2D, GX2_TILE_MODE_LINEAR_ALIGNED);
|
||||||
|
|
||||||
//! if this fails something went horribly wrong
|
//! if this fails something went horribly wrong
|
||||||
if(texture->surface.image_size == 0) {
|
if(texture->surface.imageSize == 0) {
|
||||||
delete texture;
|
delete texture;
|
||||||
texture = NULL;
|
texture = NULL;
|
||||||
gdImageDestroy(gdImg);
|
gdImageDestroy(gdImg);
|
||||||
@ -126,35 +128,35 @@ void GuiImageData::loadImage(const u8 *img, int imgSize, int textureClamp, int t
|
|||||||
|
|
||||||
//! allocate memory for the surface
|
//! allocate memory for the surface
|
||||||
memoryType = eMemTypeMEM2;
|
memoryType = eMemTypeMEM2;
|
||||||
texture->surface.image_data = memalign(texture->surface.align, texture->surface.image_size);
|
texture->surface.image = memalign(texture->surface.alignment, texture->surface.imageSize);
|
||||||
//! try MEM1 on failure
|
//! try MEM1 on failure
|
||||||
if(!texture->surface.image_data) {
|
if(!texture->surface.image) {
|
||||||
memoryType = eMemTypeMEM1;
|
memoryType = eMemTypeMEM1;
|
||||||
texture->surface.image_data = MEM1_alloc(texture->surface.image_size, texture->surface.align);
|
texture->surface.image = MEM1_alloc(texture->surface.imageSize, texture->surface.alignment);
|
||||||
}
|
}
|
||||||
//! try MEM bucket on failure
|
//! try MEM bucket on failure
|
||||||
if(!texture->surface.image_data) {
|
if(!texture->surface.image) {
|
||||||
memoryType = eMemTypeMEMBucket;
|
memoryType = eMemTypeMEMBucket;
|
||||||
texture->surface.image_data = MEMBucket_alloc(texture->surface.image_size, texture->surface.align);
|
texture->surface.image = MEMBucket_alloc(texture->surface.imageSize, texture->surface.alignment);
|
||||||
}
|
}
|
||||||
//! check if memory is available for image
|
//! check if memory is available for image
|
||||||
if(!texture->surface.image_data) {
|
if(!texture->surface.image) {
|
||||||
gdImageDestroy(gdImg);
|
gdImageDestroy(gdImg);
|
||||||
delete texture;
|
delete texture;
|
||||||
texture = NULL;
|
texture = NULL;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
//! set mip map data pointer
|
//! set mip map data pointer
|
||||||
texture->surface.mip_data = NULL;
|
texture->surface.mipmaps = NULL;
|
||||||
//! convert image to texture
|
//! convert image to texture
|
||||||
switch(textureFormat)
|
switch(textureFormat)
|
||||||
{
|
{
|
||||||
default:
|
default:
|
||||||
case GX2_SURFACE_FORMAT_TCS_R8_G8_B8_A8_UNORM:
|
case GX2_SURFACE_FORMAT_UNORM_R8_G8_B8_A8:
|
||||||
gdImageToUnormR8G8B8A8(gdImg, (u32*)texture->surface.image_data, texture->surface.width, texture->surface.height, texture->surface.pitch);
|
gdImageToUnormR8G8B8A8(gdImg, (u32*)texture->surface.image, texture->surface.width, texture->surface.height, texture->surface.pitch);
|
||||||
break;
|
break;
|
||||||
case GX2_SURFACE_FORMAT_TCS_R5_G6_B5_UNORM:
|
case GX2_SURFACE_FORMAT_UNORM_R5_G6_B5:
|
||||||
gdImageToUnormR5G6B5(gdImg, (u16*)texture->surface.image_data, texture->surface.width, texture->surface.height, texture->surface.pitch);
|
gdImageToUnormR5G6B5(gdImg, (u16*)texture->surface.image, texture->surface.width, texture->surface.height, texture->surface.pitch);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -162,10 +164,10 @@ void GuiImageData::loadImage(const u8 *img, int imgSize, int textureClamp, int t
|
|||||||
gdImageDestroy(gdImg);
|
gdImageDestroy(gdImg);
|
||||||
|
|
||||||
//! invalidate the memory
|
//! invalidate the memory
|
||||||
GX2Invalidate(GX2_INVALIDATE_CPU_TEXTURE, texture->surface.image_data, texture->surface.image_size);
|
GX2Invalidate(GX2_INVALIDATE_MODE_CPU_TEXTURE, texture->surface.image, texture->surface.imageSize);
|
||||||
//! initialize the sampler
|
//! initialize the sampler
|
||||||
sampler = new GX2Sampler;
|
sampler = new GX2Sampler;
|
||||||
GX2InitSampler(sampler, textureClamp, GX2_TEX_XY_FILTER_BILINEAR);
|
GX2InitSampler(sampler, textureClamp, GX2_TEX_XY_FILTER_MODE_LINEAR);
|
||||||
}
|
}
|
||||||
|
|
||||||
void GuiImageData::gdImageToUnormR8G8B8A8(gdImagePtr gdImg, u32 *imgBuffer, u32 width, u32 height, u32 pitch)
|
void GuiImageData::gdImageToUnormR8G8B8A8(gdImagePtr gdImg, u32 *imgBuffer, u32 width, u32 height, u32 pitch)
|
||||||
|
@ -17,9 +17,10 @@
|
|||||||
#ifndef GUI_IMAGEDATA_H_
|
#ifndef GUI_IMAGEDATA_H_
|
||||||
#define GUI_IMAGEDATA_H_
|
#define GUI_IMAGEDATA_H_
|
||||||
|
|
||||||
#include <gctypes.h>
|
|
||||||
#include <gd.h>
|
#include <gd.h>
|
||||||
#include "dynamic_libs/gx2_functions.h"
|
#include <gx2/enum.h>
|
||||||
|
#include <gx2/texture.h>
|
||||||
|
#include <gx2/sampler.h>
|
||||||
#include "system/AsyncDeleter.h"
|
#include "system/AsyncDeleter.h"
|
||||||
|
|
||||||
class GuiImageData : public AsyncDeleter::Element
|
class GuiImageData : public AsyncDeleter::Element
|
||||||
@ -29,13 +30,13 @@ public:
|
|||||||
GuiImageData();
|
GuiImageData();
|
||||||
//!\param img Image data
|
//!\param img Image data
|
||||||
//!\param imgSize The image size
|
//!\param imgSize The image size
|
||||||
GuiImageData(const u8 * img, int imgSize, int textureClamp = GX2_TEX_CLAMP_CLAMP, int textureFormat = GX2_SURFACE_FORMAT_TCS_R8_G8_B8_A8_UNORM);
|
GuiImageData(const u8 * img, int imgSize, GX2TexClampMode textureClamp = GX2_TEX_CLAMP_MODE_CLAMP, GX2SurfaceFormat textureFormat = GX2_SURFACE_FORMAT_UNORM_R8_G8_B8_A8);
|
||||||
//!Destructor
|
//!Destructor
|
||||||
virtual ~GuiImageData();
|
virtual ~GuiImageData();
|
||||||
//!Load image from buffer
|
//!Load image from buffer
|
||||||
//!\param img Image data
|
//!\param img Image data
|
||||||
//!\param imgSize The image size
|
//!\param imgSize The image size
|
||||||
void loadImage(const u8 * img, int imgSize, int textureClamp = GX2_TEX_CLAMP_CLAMP, int textureFormat = GX2_SURFACE_FORMAT_TCS_R8_G8_B8_A8_UNORM);
|
void loadImage(const u8 * img, int imgSize, GX2TexClampMode textureClamp = GX2_TEX_CLAMP_MODE_CLAMP, GX2SurfaceFormat textureFormat = GX2_SURFACE_FORMAT_UNORM_R8_G8_B8_A8);
|
||||||
//! getter functions
|
//! getter functions
|
||||||
const GX2Texture * getTexture() const { return texture; };
|
const GX2Texture * getTexture() const { return texture; };
|
||||||
const GX2Sampler * getSampler() const { return sampler; };
|
const GX2Sampler * getSampler() const { return sampler; };
|
||||||
|
@ -51,8 +51,8 @@ GuiParticleImage::GuiParticleImage(int w, int h, u32 particleCount)
|
|||||||
colorVertexs[i * 4 + 2] = 0xff;
|
colorVertexs[i * 4 + 2] = 0xff;
|
||||||
colorVertexs[i * 4 + 3] = 0xff;
|
colorVertexs[i * 4 + 3] = 0xff;
|
||||||
}
|
}
|
||||||
GX2Invalidate(GX2_INVALIDATE_CPU_ATTRIB_BUFFER, posVertexs, ColorShader::cuVertexAttrSize * CIRCLE_VERTEX_COUNT);
|
GX2Invalidate(GX2_INVALIDATE_MODE_CPU_ATTRIBUTE_BUFFER, posVertexs, ColorShader::cuVertexAttrSize * CIRCLE_VERTEX_COUNT);
|
||||||
GX2Invalidate(GX2_INVALIDATE_CPU_ATTRIB_BUFFER, colorVertexs, ColorShader::cuColorAttrSize * CIRCLE_VERTEX_COUNT);
|
GX2Invalidate(GX2_INVALIDATE_MODE_CPU_ATTRIBUTE_BUFFER, colorVertexs, ColorShader::cuColorAttrSize * CIRCLE_VERTEX_COUNT);
|
||||||
|
|
||||||
particles.resize(particleCount);
|
particles.resize(particleCount);
|
||||||
|
|
||||||
@ -62,8 +62,8 @@ GuiParticleImage::GuiParticleImage(int w, int h, u32 particleCount)
|
|||||||
particles[i].position.y = getRandMinusOneToOneF32() * getHeight() * 0.5f;
|
particles[i].position.y = getRandMinusOneToOneF32() * getHeight() * 0.5f;
|
||||||
particles[i].position.z = 0.0f;
|
particles[i].position.z = 0.0f;
|
||||||
particles[i].colors = glm::vec4(1.0f, 1.0f, 1.0f, (getRandZeroToOneF32() * 0.6f) + 0.05f);
|
particles[i].colors = glm::vec4(1.0f, 1.0f, 1.0f, (getRandZeroToOneF32() * 0.6f) + 0.05f);
|
||||||
particles[i].radius = getRandZeroToOneF32() * 30.0f + 60.0f;
|
particles[i].radius = getRandZeroToOneF32() * 30.0f;
|
||||||
particles[i].speed = (getRandZeroToOneF32() * 0.4f) + 0.6f;
|
particles[i].speed = (getRandZeroToOneF32() * 0.6f) + 0.2f;
|
||||||
particles[i].direction = getRandMinusOneToOneF32();
|
particles[i].direction = getRandMinusOneToOneF32();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -97,8 +97,8 @@ void GuiParticleImage::draw(CVideo *pVideo)
|
|||||||
particles[i].position.x = getRandMinusOneToOneF32() * getWidth() * 0.5f;
|
particles[i].position.x = getRandMinusOneToOneF32() * getWidth() * 0.5f;
|
||||||
particles[i].position.y = -getHeight() * 0.5f - 30.0f;
|
particles[i].position.y = -getHeight() * 0.5f - 30.0f;
|
||||||
particles[i].colors = glm::vec4(1.0f, 1.0f, 1.0f, (getRandZeroToOneF32() * 0.6f) + 0.05f);
|
particles[i].colors = glm::vec4(1.0f, 1.0f, 1.0f, (getRandZeroToOneF32() * 0.6f) + 0.05f);
|
||||||
particles[i].radius = getRandZeroToOneF32() * 30.0f + 60.0f;
|
particles[i].radius = getRandZeroToOneF32() * 30.0f;
|
||||||
particles[i].speed = (getRandZeroToOneF32() * 0.4f) + 0.6f;
|
particles[i].speed = (getRandZeroToOneF32() * 0.6f) + 0.2f;
|
||||||
particles[i].direction = getRandMinusOneToOneF32();
|
particles[i].direction = getRandMinusOneToOneF32();
|
||||||
}
|
}
|
||||||
if(particles[i].position.x < (-getWidth() * 0.5f - 50.0f))
|
if(particles[i].position.x < (-getWidth() * 0.5f - 50.0f))
|
||||||
@ -123,6 +123,6 @@ void GuiParticleImage::draw(CVideo *pVideo)
|
|||||||
ColorShader::instance()->setOffset(positionOffsets);
|
ColorShader::instance()->setOffset(positionOffsets);
|
||||||
ColorShader::instance()->setScale(scaleFactor);
|
ColorShader::instance()->setScale(scaleFactor);
|
||||||
ColorShader::instance()->setColorIntensity(colorIntensity * particles[i].colors);
|
ColorShader::instance()->setColorIntensity(colorIntensity * particles[i].colors);
|
||||||
ColorShader::instance()->draw(GX2_PRIMITIVE_TRIANGLE_FAN, CIRCLE_VERTEX_COUNT);
|
ColorShader::instance()->draw(GX2_PRIMITIVE_MODE_TRIANGLE_FAN, CIRCLE_VERTEX_COUNT);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -16,7 +16,6 @@
|
|||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
#include "GuiSound.h"
|
#include "GuiSound.h"
|
||||||
#include "sounds/SoundHandler.hpp"
|
#include "sounds/SoundHandler.hpp"
|
||||||
#include "dynamic_libs/os_functions.h"
|
|
||||||
|
|
||||||
GuiSound::GuiSound(const char * filepath)
|
GuiSound::GuiSound(const char * filepath)
|
||||||
{
|
{
|
||||||
|
@ -17,7 +17,7 @@
|
|||||||
#ifndef GUI_SOUND_H_
|
#ifndef GUI_SOUND_H_
|
||||||
#define GUI_SOUND_H_
|
#define GUI_SOUND_H_
|
||||||
|
|
||||||
#include <gctypes.h>
|
#include "common/types.h"
|
||||||
#include "system/AsyncDeleter.h"
|
#include "system/AsyncDeleter.h"
|
||||||
|
|
||||||
//!Sound conversion and playback. A wrapper for other sound libraries - ASND, libmad, ltremor, etc
|
//!Sound conversion and playback. A wrapper for other sound libraries - ASND, libmad, ltremor, etc
|
||||||
@ -28,7 +28,7 @@ class GuiSound : public AsyncDeleter::Element
|
|||||||
//!\param sound Pointer to the sound data
|
//!\param sound Pointer to the sound data
|
||||||
//!\param filesize Length of sound data
|
//!\param filesize Length of sound data
|
||||||
GuiSound(const char * filepath);
|
GuiSound(const char * filepath);
|
||||||
GuiSound(const u8 * sound, int length);
|
GuiSound(const u8 * sound, s32 length);
|
||||||
//!Destructor
|
//!Destructor
|
||||||
virtual ~GuiSound();
|
virtual ~GuiSound();
|
||||||
//!Load a file and replace the old one
|
//!Load a file and replace the old one
|
||||||
|
@ -14,9 +14,9 @@
|
|||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
#include "GuiText.h"
|
|
||||||
#include "FreeTypeGX.h"
|
|
||||||
#include "video/CVideo.h"
|
#include "video/CVideo.h"
|
||||||
|
#include "FreeTypeGX.h"
|
||||||
|
#include "GuiText.h"
|
||||||
|
|
||||||
FreeTypeGX * GuiText::presentFont = NULL;
|
FreeTypeGX * GuiText::presentFont = NULL;
|
||||||
int GuiText::presetSize = 28;
|
int GuiText::presetSize = 28;
|
||||||
|
@ -17,6 +17,7 @@
|
|||||||
#ifndef GUI_TEXT_H_
|
#ifndef GUI_TEXT_H_
|
||||||
#define GUI_TEXT_H_
|
#define GUI_TEXT_H_
|
||||||
|
|
||||||
|
#include "common/gx2_ext.h"
|
||||||
#include "GuiElement.h"
|
#include "GuiElement.h"
|
||||||
//!Forward declaration
|
//!Forward declaration
|
||||||
class FreeTypeGX;
|
class FreeTypeGX;
|
||||||
|
@ -107,22 +107,22 @@ bool GuiTrigger::down(const GuiController *controller) const
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
int GuiTrigger::clicked(const GuiController *controller) const
|
bool GuiTrigger::clicked(const GuiController *controller) const
|
||||||
{
|
{
|
||||||
if((controller->chan & chan) == 0) {
|
if((controller->chan & chan) == 0) {
|
||||||
return CLICKED_NONE;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
int bResult = CLICKED_NONE;
|
bool bResult = false;
|
||||||
|
|
||||||
if(controller->data.touched && controller->data.validPointer && (btns & VPAD_TOUCH) && !controller->lastData.touched)
|
if(controller->data.touched && controller->data.validPointer && (btns & VPAD_TOUCH) && !controller->lastData.touched)
|
||||||
{
|
{
|
||||||
bResult = CLICKED_TOUCH;
|
bResult = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(controller->data.buttons_d & btns)
|
if(controller->data.buttons_d & btns)
|
||||||
{
|
{
|
||||||
bResult = CLICKED_BUTTON;
|
bResult = true;
|
||||||
}
|
}
|
||||||
return bResult;
|
return bResult;
|
||||||
}
|
}
|
||||||
|
@ -17,18 +17,12 @@
|
|||||||
#ifndef GUI_TRIGGER_H_
|
#ifndef GUI_TRIGGER_H_
|
||||||
#define GUI_TRIGGER_H_
|
#define GUI_TRIGGER_H_
|
||||||
|
|
||||||
#include "dynamic_libs/os_functions.h"
|
#include "common/types.h"
|
||||||
|
|
||||||
|
|
||||||
//!Menu input trigger management. Determine if action is neccessary based on input data by comparing controller input data to a specific trigger element.
|
//!Menu input trigger management. Determine if action is neccessary based on input data by comparing controller input data to a specific trigger element.
|
||||||
class GuiTrigger
|
class GuiTrigger
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
enum eClicked{
|
|
||||||
CLICKED_NONE = 0x00,
|
|
||||||
CLICKED_TOUCH = 0x01,
|
|
||||||
CLICKED_BUTTON = 0x02,
|
|
||||||
};
|
|
||||||
enum eChannels {
|
enum eChannels {
|
||||||
CHANNEL_1 = 0x01,
|
CHANNEL_1 = 0x01,
|
||||||
CHANNEL_2 = 0x02,
|
CHANNEL_2 = 0x02,
|
||||||
@ -91,7 +85,7 @@ public:
|
|||||||
bool right(const GuiController *controller) const;
|
bool right(const GuiController *controller) const;
|
||||||
bool up(const GuiController *controller) const;
|
bool up(const GuiController *controller) const;
|
||||||
bool down(const GuiController *controller) const;
|
bool down(const GuiController *controller) const;
|
||||||
int clicked(const GuiController *controller) const;
|
bool clicked(const GuiController *controller) const;
|
||||||
bool held(const GuiController *controller) const;
|
bool held(const GuiController *controller) const;
|
||||||
bool released(const GuiController *controller) const;
|
bool released(const GuiController *controller) const;
|
||||||
private:
|
private:
|
||||||
|
@ -17,8 +17,8 @@
|
|||||||
#ifndef VPAD_CONTROLLER_H_
|
#ifndef VPAD_CONTROLLER_H_
|
||||||
#define VPAD_CONTROLLER_H_
|
#define VPAD_CONTROLLER_H_
|
||||||
|
|
||||||
|
#include <vpad/input.h>
|
||||||
#include "GuiController.h"
|
#include "GuiController.h"
|
||||||
#include "dynamic_libs/vpad_functions.h"
|
|
||||||
|
|
||||||
class VPadController : public GuiController
|
class VPadController : public GuiController
|
||||||
{
|
{
|
||||||
@ -37,27 +37,26 @@ public:
|
|||||||
{
|
{
|
||||||
lastData = data;
|
lastData = data;
|
||||||
|
|
||||||
int vpadError = -1;
|
VPADReadError vpadError = VPAD_READ_NO_SAMPLES;
|
||||||
VPADRead(0, &vpad, 1, &vpadError);
|
VPADRead(0, &vpad, 1, &vpadError);
|
||||||
|
|
||||||
if(vpadError == 0)
|
if(vpadError == VPAD_READ_SUCCESS)
|
||||||
{
|
{
|
||||||
data.buttons_r = vpad.btns_r;
|
data.buttons_r = vpad.release;
|
||||||
data.buttons_h = vpad.btns_h;
|
data.buttons_h = vpad.hold;
|
||||||
data.buttons_d = vpad.btns_d;
|
data.buttons_d = vpad.trigger;
|
||||||
data.validPointer = !vpad.tpdata.invalid;
|
data.validPointer = !vpad.tpNormal.validity;
|
||||||
data.touched = vpad.tpdata.touched;
|
data.touched = vpad.tpNormal.touched;
|
||||||
//! calculate the screen offsets
|
//! calculate the screen offsets
|
||||||
data.x = -(width >> 1) + ((int)(vpad.tpdata1.x * ((width)/1211.0f)*width) >> 12)-30;
|
data.x = -(width >> 1) + (int)((vpad.tpFiltered1.x * width) >> 12);
|
||||||
data.y = -(height >> 1) + ((int)(vpad.tpdata1.y * ((height)/653.0f)*height) >> 12)-35;
|
data.y = (height >> 1) - (int)(height - ((vpad.tpFiltered1.y * height) >> 12));
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
VPADData vpad;
|
VPADStatus vpad;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -1,49 +0,0 @@
|
|||||||
#include <string.h>
|
|
||||||
#include "common/common.h"
|
|
||||||
#include "common/kernel_defs.h"
|
|
||||||
#include "kernel/kernel_functions.h"
|
|
||||||
#include "kernel/syscalls.h"
|
|
||||||
|
|
||||||
/* our retain data */
|
|
||||||
ReducedCosAppXmlInfo cosAppXmlInfoStruct __attribute__((section(".data")));
|
|
||||||
/*
|
|
||||||
* This function is a kernel hook function. It is called directly from kernel code at position 0xFFF18558.
|
|
||||||
*/
|
|
||||||
void my_PrepareTitle(CosAppXmlInfo *xmlKernelInfo)
|
|
||||||
{
|
|
||||||
/**
|
|
||||||
* DBAT for access to our data region is setup at this point for the 0xC0000000 area.
|
|
||||||
*/
|
|
||||||
|
|
||||||
//! Copy all data from the XML info
|
|
||||||
strncpy(cosAppXmlInfoStruct.rpx_name, xmlKernelInfo->rpx_name, FS_MAX_ENTNAME_SIZE);
|
|
||||||
|
|
||||||
cosAppXmlInfoStruct.version_cos_xml = xmlKernelInfo->version_cos_xml;
|
|
||||||
cosAppXmlInfoStruct.os_version = xmlKernelInfo->os_version;
|
|
||||||
cosAppXmlInfoStruct.title_id = xmlKernelInfo->title_id;
|
|
||||||
cosAppXmlInfoStruct.app_type = xmlKernelInfo->app_type;
|
|
||||||
cosAppXmlInfoStruct.cmdFlags = xmlKernelInfo->cmdFlags;
|
|
||||||
cosAppXmlInfoStruct.max_size = xmlKernelInfo->max_size;
|
|
||||||
cosAppXmlInfoStruct.avail_size = xmlKernelInfo->avail_size;
|
|
||||||
cosAppXmlInfoStruct.codegen_size = xmlKernelInfo->codegen_size;
|
|
||||||
cosAppXmlInfoStruct.codegen_core = xmlKernelInfo->codegen_core;
|
|
||||||
cosAppXmlInfoStruct.max_codesize = xmlKernelInfo->max_codesize;
|
|
||||||
cosAppXmlInfoStruct.overlay_arena = xmlKernelInfo->overlay_arena;
|
|
||||||
cosAppXmlInfoStruct.default_stack0_size = xmlKernelInfo->default_stack0_size;
|
|
||||||
cosAppXmlInfoStruct.default_stack1_size = xmlKernelInfo->default_stack1_size;
|
|
||||||
cosAppXmlInfoStruct.default_stack2_size = xmlKernelInfo->default_stack2_size;
|
|
||||||
cosAppXmlInfoStruct.default_redzone0_size = xmlKernelInfo->default_redzone0_size;
|
|
||||||
cosAppXmlInfoStruct.default_redzone1_size = xmlKernelInfo->default_redzone1_size;
|
|
||||||
cosAppXmlInfoStruct.default_redzone2_size = xmlKernelInfo->default_redzone2_size;
|
|
||||||
cosAppXmlInfoStruct.exception_stack0_size = xmlKernelInfo->exception_stack0_size;
|
|
||||||
cosAppXmlInfoStruct.exception_stack1_size = xmlKernelInfo->exception_stack1_size;
|
|
||||||
cosAppXmlInfoStruct.exception_stack2_size = xmlKernelInfo->exception_stack2_size;
|
|
||||||
cosAppXmlInfoStruct.sdk_version = xmlKernelInfo->sdk_version;
|
|
||||||
cosAppXmlInfoStruct.title_version = xmlKernelInfo->title_version;
|
|
||||||
}
|
|
||||||
|
|
||||||
void SetupKernelCallback(void)
|
|
||||||
{
|
|
||||||
KernelSetupSyscalls();
|
|
||||||
}
|
|
||||||
|
|
@ -1,19 +0,0 @@
|
|||||||
#ifndef __KERNEL_FUNCTIONS_H_
|
|
||||||
#define __KERNEL_FUNCTIONS_H_
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
extern "C" {
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include "common/kernel_defs.h"
|
|
||||||
#include "syscalls.h"
|
|
||||||
|
|
||||||
void SetupKernelCallback(void);
|
|
||||||
|
|
||||||
extern ReducedCosAppXmlInfo cosAppXmlInfoStruct;
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif // __KERNEL_FUNCTIONS_H_
|
|
@ -1,136 +0,0 @@
|
|||||||
# Created by dimok
|
|
||||||
# This stuff may need a change in different kernel versions
|
|
||||||
# This is only needed when launched directly through browser and not SD card.
|
|
||||||
|
|
||||||
.section ".kernel_code"
|
|
||||||
.globl SaveAndResetDataBATs_And_SRs_hook
|
|
||||||
SaveAndResetDataBATs_And_SRs_hook:
|
|
||||||
# setup CTR to the position we need to return to
|
|
||||||
mflr r5
|
|
||||||
mtctr r5
|
|
||||||
# set link register to its original value
|
|
||||||
mtlr r7
|
|
||||||
# setup us a nice DBAT for our code data with same region as our code
|
|
||||||
mfspr r5, 560
|
|
||||||
mtspr 570, r5
|
|
||||||
mfspr r5, 561
|
|
||||||
mtspr 571, r5
|
|
||||||
# restore the original kernel instructions that we replaced
|
|
||||||
lwz r5, 0x34(r3)
|
|
||||||
lwz r6, 0x38(r3)
|
|
||||||
lwz r7, 0x3C(r3)
|
|
||||||
lwz r8, 0x40(r3)
|
|
||||||
lwz r9, 0x44(r3)
|
|
||||||
lwz r10, 0x48(r3)
|
|
||||||
lwz r11, 0x4C(r3)
|
|
||||||
lwz r3, 0x50(r3)
|
|
||||||
isync
|
|
||||||
mtsr 7, r5
|
|
||||||
# jump back to the position in kernel after our patch (from LR)
|
|
||||||
bctr
|
|
||||||
|
|
||||||
.extern my_PrepareTitle
|
|
||||||
.globl my_PrepareTitle_hook
|
|
||||||
my_PrepareTitle_hook:
|
|
||||||
# store all registers on stack to avoid issues with the call to C functions
|
|
||||||
stwu r1, -0x90(r1)
|
|
||||||
# registers for our own usage
|
|
||||||
# only need r31 and rest is from tests before, just leaving it for later tests
|
|
||||||
stw r28, 0x20(r1)
|
|
||||||
stw r29, 0x24(r1)
|
|
||||||
stw r30, 0x28(r1)
|
|
||||||
stw r31, 0x2C(r1)
|
|
||||||
|
|
||||||
stw r3, 0x30(r1)
|
|
||||||
stw r4, 0x34(r1)
|
|
||||||
stw r5, 0x38(r1)
|
|
||||||
stw r6, 0x3C(r1)
|
|
||||||
stw r7, 0x40(r1)
|
|
||||||
stw r8, 0x44(r1)
|
|
||||||
stw r9, 0x48(r1)
|
|
||||||
stw r10, 0x4C(r1)
|
|
||||||
stw r11, 0x50(r1)
|
|
||||||
stw r12, 0x54(r1)
|
|
||||||
stw r13, 0x58(r1)
|
|
||||||
stw r14, 0x5C(r1)
|
|
||||||
stw r15, 0x60(r1)
|
|
||||||
stw r16, 0x64(r1)
|
|
||||||
stw r17, 0x68(r1)
|
|
||||||
stw r18, 0x6C(r1)
|
|
||||||
stw r19, 0x70(r1)
|
|
||||||
stw r20, 0x74(r1)
|
|
||||||
stw r21, 0x78(r1)
|
|
||||||
stw r22, 0x7C(r1)
|
|
||||||
|
|
||||||
# save original DBAT registers
|
|
||||||
mfdbatu r28, 0
|
|
||||||
mfdbatl r29, 0
|
|
||||||
|
|
||||||
# setup access to our data memory range
|
|
||||||
lis r3, 0xC000
|
|
||||||
ori r3, r3, 0x1FFF
|
|
||||||
mtdbatu 0, r3
|
|
||||||
lis r3, 0x3000
|
|
||||||
ori r3, r3, 0x0012
|
|
||||||
mtdbatl 0, r3
|
|
||||||
|
|
||||||
# memory barrier
|
|
||||||
eieio
|
|
||||||
isync
|
|
||||||
|
|
||||||
# save the LR from where we came
|
|
||||||
mflr r31
|
|
||||||
|
|
||||||
# the cos.xml/app.xml structure is at the location 0x68 of r11
|
|
||||||
# there are actually many places that can be hooked for it
|
|
||||||
# e.g. 0xFFF16130 and r27 points to this structure
|
|
||||||
addi r3, r11, 0x68
|
|
||||||
|
|
||||||
bl my_PrepareTitle
|
|
||||||
|
|
||||||
# restore original DBAT registers
|
|
||||||
mtdbatu 0, r28
|
|
||||||
mtdbatl 0, r29
|
|
||||||
|
|
||||||
# memory barrier
|
|
||||||
eieio
|
|
||||||
isync
|
|
||||||
|
|
||||||
# setup LR to jump back to kernel code
|
|
||||||
mtlr r31
|
|
||||||
|
|
||||||
# restore all original values of registers from stack
|
|
||||||
lwz r28, 0x20(r1)
|
|
||||||
lwz r29, 0x24(r1)
|
|
||||||
lwz r30, 0x28(r1)
|
|
||||||
lwz r31, 0x2C(r1)
|
|
||||||
|
|
||||||
lwz r3, 0x30(r1)
|
|
||||||
lwz r4, 0x34(r1)
|
|
||||||
lwz r5, 0x38(r1)
|
|
||||||
lwz r6, 0x3C(r1)
|
|
||||||
lwz r7, 0x40(r1)
|
|
||||||
lwz r8, 0x44(r1)
|
|
||||||
lwz r9, 0x48(r1)
|
|
||||||
lwz r10, 0x4C(r1)
|
|
||||||
lwz r11, 0x50(r1)
|
|
||||||
lwz r12, 0x54(r1)
|
|
||||||
lwz r13, 0x58(r1)
|
|
||||||
lwz r14, 0x5C(r1)
|
|
||||||
lwz r15, 0x60(r1)
|
|
||||||
lwz r16, 0x64(r1)
|
|
||||||
lwz r17, 0x68(r1)
|
|
||||||
lwz r18, 0x6C(r1)
|
|
||||||
lwz r19, 0x70(r1)
|
|
||||||
lwz r20, 0x74(r1)
|
|
||||||
lwz r21, 0x78(r1)
|
|
||||||
lwz r22, 0x7C(r1)
|
|
||||||
|
|
||||||
# restore the stack
|
|
||||||
addi r1, r1, 0x90
|
|
||||||
|
|
||||||
# restore original instruction that we replaced in the kernel
|
|
||||||
clrlwi r7, r12, 0
|
|
||||||
|
|
||||||
# jump back
|
|
||||||
blr
|
|
@ -1,255 +0,0 @@
|
|||||||
#include "common/os_defs.h"
|
|
||||||
#include "common/kernel_defs.h"
|
|
||||||
#include "common/common.h"
|
|
||||||
#include "dynamic_libs/os_functions.h"
|
|
||||||
#include "utils/utils.h"
|
|
||||||
#include "syscalls.h"
|
|
||||||
|
|
||||||
extern void my_PrepareTitle_hook(void);
|
|
||||||
|
|
||||||
static unsigned int origPrepareTitleInstr __attribute__((section(".data"))) = 0;
|
|
||||||
|
|
||||||
static void KernelCopyData(unsigned int addr, unsigned int src, unsigned int len)
|
|
||||||
{
|
|
||||||
/*
|
|
||||||
* Setup a DBAT access with cache inhibited to write through and read directly from memory
|
|
||||||
*/
|
|
||||||
unsigned int dbatu0, dbatl0, dbatu1, dbatl1;
|
|
||||||
// save the original DBAT value
|
|
||||||
asm volatile("mfdbatu %0, 0" : "=r" (dbatu0));
|
|
||||||
asm volatile("mfdbatl %0, 0" : "=r" (dbatl0));
|
|
||||||
asm volatile("mfdbatu %0, 1" : "=r" (dbatu1));
|
|
||||||
asm volatile("mfdbatl %0, 1" : "=r" (dbatl1));
|
|
||||||
|
|
||||||
unsigned int target_dbatu0 = 0;
|
|
||||||
unsigned int target_dbatl0 = 0;
|
|
||||||
unsigned int target_dbatu1 = 0;
|
|
||||||
unsigned int target_dbatl1 = 0;
|
|
||||||
|
|
||||||
unsigned char *dst_p = (unsigned char*)addr;
|
|
||||||
unsigned char *src_p = (unsigned char*)src;
|
|
||||||
|
|
||||||
// we only need DBAT modification for addresses out of our own DBAT range
|
|
||||||
// as our own DBAT is available everywhere for user and supervisor
|
|
||||||
// since our own DBAT is on DBAT5 position we don't collide here
|
|
||||||
if(addr < 0x00800000 || addr >= 0x01000000)
|
|
||||||
{
|
|
||||||
target_dbatu0 = (addr & 0x00F00000) | 0xC0000000 | 0x1F;
|
|
||||||
target_dbatl0 = (addr & 0xFFF00000) | 0x32;
|
|
||||||
asm volatile("mtdbatu 0, %0" : : "r" (target_dbatu0));
|
|
||||||
asm volatile("mtdbatl 0, %0" : : "r" (target_dbatl0));
|
|
||||||
dst_p = (unsigned char*)((addr & 0xFFFFFF) | 0xC0000000);
|
|
||||||
}
|
|
||||||
if(src < 0x00800000 || src >= 0x01000000)
|
|
||||||
{
|
|
||||||
target_dbatu1 = (src & 0x00F00000) | 0xB0000000 | 0x1F;
|
|
||||||
target_dbatl1 = (src & 0xFFF00000) | 0x32;
|
|
||||||
|
|
||||||
asm volatile("mtdbatu 1, %0" : : "r" (target_dbatu1));
|
|
||||||
asm volatile("mtdbatl 1, %0" : : "r" (target_dbatl1));
|
|
||||||
src_p = (unsigned char*)((src & 0xFFFFFF) | 0xB0000000);
|
|
||||||
}
|
|
||||||
|
|
||||||
asm volatile("eieio; isync");
|
|
||||||
|
|
||||||
unsigned int i;
|
|
||||||
for(i = 0; i < len; i++)
|
|
||||||
{
|
|
||||||
// if we are on the edge to next chunk
|
|
||||||
if((target_dbatu0 != 0) && (((unsigned int)dst_p & 0x00F00000) != (target_dbatu0 & 0x00F00000)))
|
|
||||||
{
|
|
||||||
target_dbatu0 = ((addr + i) & 0x00F00000) | 0xC0000000 | 0x1F;
|
|
||||||
target_dbatl0 = ((addr + i) & 0xFFF00000) | 0x32;
|
|
||||||
dst_p = (unsigned char*)(((addr + i) & 0xFFFFFF) | 0xC0000000);
|
|
||||||
|
|
||||||
asm volatile("eieio; isync");
|
|
||||||
asm volatile("mtdbatu 0, %0" : : "r" (target_dbatu0));
|
|
||||||
asm volatile("mtdbatl 0, %0" : : "r" (target_dbatl0));
|
|
||||||
asm volatile("eieio; isync");
|
|
||||||
}
|
|
||||||
if((target_dbatu1 != 0) && (((unsigned int)src_p & 0x00F00000) != (target_dbatu1 & 0x00F00000)))
|
|
||||||
{
|
|
||||||
target_dbatu1 = ((src + i) & 0x00F00000) | 0xB0000000 | 0x1F;
|
|
||||||
target_dbatl1 = ((src + i) & 0xFFF00000) | 0x32;
|
|
||||||
src_p = (unsigned char*)(((src + i) & 0xFFFFFF) | 0xB0000000);
|
|
||||||
|
|
||||||
asm volatile("eieio; isync");
|
|
||||||
asm volatile("mtdbatu 1, %0" : : "r" (target_dbatu1));
|
|
||||||
asm volatile("mtdbatl 1, %0" : : "r" (target_dbatl1));
|
|
||||||
asm volatile("eieio; isync");
|
|
||||||
}
|
|
||||||
|
|
||||||
*dst_p = *src_p;
|
|
||||||
|
|
||||||
++dst_p;
|
|
||||||
++src_p;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Restore original DBAT value
|
|
||||||
*/
|
|
||||||
asm volatile("eieio; isync");
|
|
||||||
asm volatile("mtdbatu 0, %0" : : "r" (dbatu0));
|
|
||||||
asm volatile("mtdbatl 0, %0" : : "r" (dbatl0));
|
|
||||||
asm volatile("mtdbatu 1, %0" : : "r" (dbatu1));
|
|
||||||
asm volatile("mtdbatl 1, %0" : : "r" (dbatl1));
|
|
||||||
asm volatile("eieio; isync");
|
|
||||||
}
|
|
||||||
|
|
||||||
static void KernelReadDBATs(bat_table_t * table)
|
|
||||||
{
|
|
||||||
u32 i = 0;
|
|
||||||
|
|
||||||
asm volatile("eieio; isync");
|
|
||||||
|
|
||||||
asm volatile("mfspr %0, 536" : "=r" (table->bat[i].h));
|
|
||||||
asm volatile("mfspr %0, 537" : "=r" (table->bat[i].l));
|
|
||||||
i++;
|
|
||||||
asm volatile("mfspr %0, 538" : "=r" (table->bat[i].h));
|
|
||||||
asm volatile("mfspr %0, 539" : "=r" (table->bat[i].l));
|
|
||||||
i++;
|
|
||||||
asm volatile("mfspr %0, 540" : "=r" (table->bat[i].h));
|
|
||||||
asm volatile("mfspr %0, 541" : "=r" (table->bat[i].l));
|
|
||||||
i++;
|
|
||||||
asm volatile("mfspr %0, 542" : "=r" (table->bat[i].h));
|
|
||||||
asm volatile("mfspr %0, 543" : "=r" (table->bat[i].l));
|
|
||||||
i++;
|
|
||||||
|
|
||||||
asm volatile("mfspr %0, 568" : "=r" (table->bat[i].h));
|
|
||||||
asm volatile("mfspr %0, 569" : "=r" (table->bat[i].l));
|
|
||||||
i++;
|
|
||||||
asm volatile("mfspr %0, 570" : "=r" (table->bat[i].h));
|
|
||||||
asm volatile("mfspr %0, 571" : "=r" (table->bat[i].l));
|
|
||||||
i++;
|
|
||||||
asm volatile("mfspr %0, 572" : "=r" (table->bat[i].h));
|
|
||||||
asm volatile("mfspr %0, 573" : "=r" (table->bat[i].l));
|
|
||||||
i++;
|
|
||||||
asm volatile("mfspr %0, 574" : "=r" (table->bat[i].h));
|
|
||||||
asm volatile("mfspr %0, 575" : "=r" (table->bat[i].l));
|
|
||||||
}
|
|
||||||
|
|
||||||
static void KernelWriteDBATs(bat_table_t * table)
|
|
||||||
{
|
|
||||||
u32 i = 0;
|
|
||||||
|
|
||||||
asm volatile("eieio; isync");
|
|
||||||
|
|
||||||
asm volatile("mtspr 536, %0" : : "r" (table->bat[i].h));
|
|
||||||
asm volatile("mtspr 537, %0" : : "r" (table->bat[i].l));
|
|
||||||
i++;
|
|
||||||
asm volatile("mtspr 538, %0" : : "r" (table->bat[i].h));
|
|
||||||
asm volatile("mtspr 539, %0" : : "r" (table->bat[i].l));
|
|
||||||
i++;
|
|
||||||
asm volatile("mtspr 540, %0" : : "r" (table->bat[i].h));
|
|
||||||
asm volatile("mtspr 541, %0" : : "r" (table->bat[i].l));
|
|
||||||
i++;
|
|
||||||
asm volatile("mtspr 542, %0" : : "r" (table->bat[i].h));
|
|
||||||
asm volatile("mtspr 543, %0" : : "r" (table->bat[i].l));
|
|
||||||
i++;
|
|
||||||
|
|
||||||
asm volatile("mtspr 568, %0" : : "r" (table->bat[i].h));
|
|
||||||
asm volatile("mtspr 569, %0" : : "r" (table->bat[i].l));
|
|
||||||
i++;
|
|
||||||
asm volatile("mtspr 570, %0" : : "r" (table->bat[i].h));
|
|
||||||
asm volatile("mtspr 571, %0" : : "r" (table->bat[i].l));
|
|
||||||
i++;
|
|
||||||
asm volatile("mtspr 572, %0" : : "r" (table->bat[i].h));
|
|
||||||
asm volatile("mtspr 573, %0" : : "r" (table->bat[i].l));
|
|
||||||
i++;
|
|
||||||
asm volatile("mtspr 574, %0" : : "r" (table->bat[i].h));
|
|
||||||
asm volatile("mtspr 575, %0" : : "r" (table->bat[i].l));
|
|
||||||
|
|
||||||
asm volatile("eieio; isync");
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Read a 32-bit word with kernel permissions */
|
|
||||||
uint32_t __attribute__ ((noinline)) kern_read(const void *addr)
|
|
||||||
{
|
|
||||||
uint32_t result;
|
|
||||||
asm volatile (
|
|
||||||
"li 3,1\n"
|
|
||||||
"li 4,0\n"
|
|
||||||
"li 5,0\n"
|
|
||||||
"li 6,0\n"
|
|
||||||
"li 7,0\n"
|
|
||||||
"lis 8,1\n"
|
|
||||||
"mr 9,%1\n"
|
|
||||||
"li 0,0x3400\n"
|
|
||||||
"mr %0,1\n"
|
|
||||||
"sc\n"
|
|
||||||
"nop\n"
|
|
||||||
"mr 1,%0\n"
|
|
||||||
"mr %0,3\n"
|
|
||||||
: "=r"(result)
|
|
||||||
: "b"(addr)
|
|
||||||
: "memory", "ctr", "lr", "0", "3", "4", "5", "6", "7", "8", "9", "10",
|
|
||||||
"11", "12"
|
|
||||||
);
|
|
||||||
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Write a 32-bit word with kernel permissions */
|
|
||||||
void __attribute__ ((noinline)) kern_write(void *addr, uint32_t value)
|
|
||||||
{
|
|
||||||
asm volatile (
|
|
||||||
"li 3,1\n"
|
|
||||||
"li 4,0\n"
|
|
||||||
"mr 5,%1\n"
|
|
||||||
"li 6,0\n"
|
|
||||||
"li 7,0\n"
|
|
||||||
"lis 8,1\n"
|
|
||||||
"mr 9,%0\n"
|
|
||||||
"mr %1,1\n"
|
|
||||||
"li 0,0x3500\n"
|
|
||||||
"sc\n"
|
|
||||||
"nop\n"
|
|
||||||
"mr 1,%1\n"
|
|
||||||
:
|
|
||||||
: "r"(addr), "r"(value)
|
|
||||||
: "memory", "ctr", "lr", "0", "3", "4", "5", "6", "7", "8", "9", "10",
|
|
||||||
"11", "12"
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
void KernelSetupSyscalls(void)
|
|
||||||
{
|
|
||||||
//! assign 1 so that this variable gets into the retained .data section
|
|
||||||
static uint8_t ucSyscallsSetupRequired = 1;
|
|
||||||
if(!ucSyscallsSetupRequired)
|
|
||||||
return;
|
|
||||||
|
|
||||||
ucSyscallsSetupRequired = 0;
|
|
||||||
|
|
||||||
kern_write((void*)(OS_SPECIFICS->addr_KernSyscallTbl1 + (0x36 * 4)), (unsigned int)KernelReadDBATs);
|
|
||||||
kern_write((void*)(OS_SPECIFICS->addr_KernSyscallTbl2 + (0x36 * 4)), (unsigned int)KernelReadDBATs);
|
|
||||||
kern_write((void*)(OS_SPECIFICS->addr_KernSyscallTbl3 + (0x36 * 4)), (unsigned int)KernelReadDBATs);
|
|
||||||
kern_write((void*)(OS_SPECIFICS->addr_KernSyscallTbl4 + (0x36 * 4)), (unsigned int)KernelReadDBATs);
|
|
||||||
kern_write((void*)(OS_SPECIFICS->addr_KernSyscallTbl5 + (0x36 * 4)), (unsigned int)KernelReadDBATs);
|
|
||||||
|
|
||||||
kern_write((void*)(OS_SPECIFICS->addr_KernSyscallTbl1 + (0x37 * 4)), (unsigned int)KernelWriteDBATs);
|
|
||||||
kern_write((void*)(OS_SPECIFICS->addr_KernSyscallTbl2 + (0x37 * 4)), (unsigned int)KernelWriteDBATs);
|
|
||||||
kern_write((void*)(OS_SPECIFICS->addr_KernSyscallTbl3 + (0x37 * 4)), (unsigned int)KernelWriteDBATs);
|
|
||||||
kern_write((void*)(OS_SPECIFICS->addr_KernSyscallTbl4 + (0x37 * 4)), (unsigned int)KernelWriteDBATs);
|
|
||||||
kern_write((void*)(OS_SPECIFICS->addr_KernSyscallTbl5 + (0x37 * 4)), (unsigned int)KernelWriteDBATs);
|
|
||||||
|
|
||||||
kern_write((void*)(OS_SPECIFICS->addr_KernSyscallTbl1 + (0x25 * 4)), (unsigned int)KernelCopyData);
|
|
||||||
kern_write((void*)(OS_SPECIFICS->addr_KernSyscallTbl2 + (0x25 * 4)), (unsigned int)KernelCopyData);
|
|
||||||
kern_write((void*)(OS_SPECIFICS->addr_KernSyscallTbl3 + (0x25 * 4)), (unsigned int)KernelCopyData);
|
|
||||||
kern_write((void*)(OS_SPECIFICS->addr_KernSyscallTbl4 + (0x25 * 4)), (unsigned int)KernelCopyData);
|
|
||||||
kern_write((void*)(OS_SPECIFICS->addr_KernSyscallTbl5 + (0x25 * 4)), (unsigned int)KernelCopyData);
|
|
||||||
|
|
||||||
//! write our hook to the
|
|
||||||
u32 addr_my_PrepareTitle_hook = ((u32)my_PrepareTitle_hook) | 0x48000003;
|
|
||||||
DCFlushRange(&addr_my_PrepareTitle_hook, sizeof(addr_my_PrepareTitle_hook));
|
|
||||||
|
|
||||||
SC0x25_KernelCopyData((u32)&origPrepareTitleInstr, (u32)addr_PrepareTitle_hook, 4);
|
|
||||||
SC0x25_KernelCopyData((u32)addr_PrepareTitle_hook, (u32)OSEffectiveToPhysical(&addr_my_PrepareTitle_hook), 4);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void KernelRestoreInstructions(void)
|
|
||||||
{
|
|
||||||
if(origPrepareTitleInstr != 0)
|
|
||||||
SC0x25_KernelCopyData((u32)addr_PrepareTitle_hook, (u32)&origPrepareTitleInstr, 4);
|
|
||||||
}
|
|
@ -1,26 +0,0 @@
|
|||||||
|
|
||||||
#ifndef __SYSCALLS_H_
|
|
||||||
#define __SYSCALLS_H_
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
extern "C" {
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include <gctypes.h>
|
|
||||||
#include "common/kernel_defs.h"
|
|
||||||
|
|
||||||
void KernelSetupSyscalls(void);
|
|
||||||
void KernelRestoreInstructions(void);
|
|
||||||
|
|
||||||
void SC0x25_KernelCopyData(unsigned int addr, unsigned int src, unsigned int len);
|
|
||||||
void SC0x36_KernelReadDBATs(bat_table_t * table);
|
|
||||||
void SC0x37_KernelWriteDBATs(bat_table_t * table);
|
|
||||||
|
|
||||||
uint32_t __attribute__ ((noinline)) kern_read(const void *addr);
|
|
||||||
void __attribute__ ((noinline)) kern_write(void *addr, uint32_t value);
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif // __KERNEL_FUNCTIONS_H_
|
|
@ -1,20 +0,0 @@
|
|||||||
# Created by dimok
|
|
||||||
# Syscalls for kernel that we use
|
|
||||||
|
|
||||||
.globl SC0x36_KernelReadDBATs
|
|
||||||
SC0x36_KernelReadDBATs:
|
|
||||||
li r0, 0x3600
|
|
||||||
sc
|
|
||||||
blr
|
|
||||||
|
|
||||||
.globl SC0x37_KernelWriteDBATs
|
|
||||||
SC0x37_KernelWriteDBATs:
|
|
||||||
li r0, 0x3700
|
|
||||||
sc
|
|
||||||
blr
|
|
||||||
|
|
||||||
.globl SC0x25_KernelCopyData
|
|
||||||
SC0x25_KernelCopyData:
|
|
||||||
li r0, 0x2500
|
|
||||||
sc
|
|
||||||
blr
|
|
@ -1,4 +1,4 @@
|
|||||||
OUTPUT(hidtovpad.elf);
|
OUTPUT(flappy_bird.elf);
|
||||||
|
|
||||||
/* Tell linker where our application entry is so the garbage collect can work correct */
|
/* Tell linker where our application entry is so the garbage collect can work correct */
|
||||||
ENTRY(__entry_menu);
|
ENTRY(__entry_menu);
|
||||||
@ -6,10 +6,7 @@ ENTRY(__entry_menu);
|
|||||||
SECTIONS {
|
SECTIONS {
|
||||||
. = 0x00802000;
|
. = 0x00802000;
|
||||||
.text : {
|
.text : {
|
||||||
*(.kernel_code*);
|
|
||||||
*(.text*);
|
*(.text*);
|
||||||
/* Tell linker to not garbage collect this section as it is not referenced anywhere */
|
|
||||||
KEEP(*(.kernel_code*));
|
|
||||||
}
|
}
|
||||||
.rodata : {
|
.rodata : {
|
||||||
*(.rodata*);
|
*(.rodata*);
|
||||||
|
54
src/main.cpp
54
src/main.cpp
@ -1,65 +1,37 @@
|
|||||||
|
#include <nsysnet/socket.h>
|
||||||
#include "Application.h"
|
#include "Application.h"
|
||||||
#include "dynamic_libs/os_functions.h"
|
|
||||||
#include "dynamic_libs/gx2_functions.h"
|
|
||||||
#include "dynamic_libs/syshid_functions.h"
|
|
||||||
#include "dynamic_libs/vpad_functions.h"
|
|
||||||
#include "dynamic_libs/padscore_functions.h"
|
|
||||||
#include "dynamic_libs/socket_functions.h"
|
|
||||||
#include "dynamic_libs/sys_functions.h"
|
|
||||||
#include "dynamic_libs/ax_functions.h"
|
|
||||||
#include "dynamic_libs/fs_functions.h"
|
|
||||||
#include "fs/fs_utils.h"
|
|
||||||
#include "fs/sd_fat_devoptab.h"
|
|
||||||
#include "system/memory.h"
|
#include "system/memory.h"
|
||||||
#include "utils/logger.h"
|
#include "utils/logger.h"
|
||||||
#include "utils/utils.h"
|
#include "utils/utils.h"
|
||||||
|
#include "dynamic_libs/padscore_functions.h"
|
||||||
#include "common/common.h"
|
#include "common/common.h"
|
||||||
|
|
||||||
#include "main.h"
|
|
||||||
#include "common/common.h"
|
|
||||||
|
|
||||||
#include "utils/logger.h"
|
|
||||||
|
|
||||||
#include "system/memory.h"
|
|
||||||
|
|
||||||
/* Entry point */
|
/* Entry point */
|
||||||
extern "C" int Menu_Main(void){
|
extern "C" int Menu_Main(void)
|
||||||
|
{
|
||||||
//!*******************************************************************
|
//!*******************************************************************
|
||||||
//! Initialize function pointers *
|
//! Initialize function pointers *
|
||||||
//!*******************************************************************
|
//!*******************************************************************
|
||||||
|
socket_lib_init();
|
||||||
//! do OS (for acquire) and sockets first so we got logging
|
//! do OS (for acquire) and sockets first so we got logging
|
||||||
InitOSFunctionPointers();
|
|
||||||
InitSocketFunctionPointers();
|
|
||||||
InitGX2FunctionPointers();
|
|
||||||
InitSysFunctionPointers();
|
|
||||||
InitVPadFunctionPointers();
|
|
||||||
InitPadScoreFunctionPointers();
|
|
||||||
InitAXFunctionPointers();
|
|
||||||
InitFSFunctionPointers();
|
|
||||||
|
|
||||||
log_init("192.168.1.12");
|
log_init("192.168.1.12");
|
||||||
|
|
||||||
//Otherwise apply the patches!!!
|
InitPadScoreFunctionPointers();
|
||||||
log_printf("GX2_template\n\n");
|
log_printf("Function exports loaded\n");
|
||||||
|
|
||||||
|
log_print("Initialize memory management\n");
|
||||||
|
memoryInitialize();
|
||||||
|
|
||||||
//!*******************************************************************
|
//!*******************************************************************
|
||||||
//! Initialize heap memory *
|
//! Initialize heap memory *
|
||||||
//!*******************************************************************
|
//!*******************************************************************
|
||||||
log_print("Initialize memory management\n");
|
|
||||||
memoryInitialize();
|
|
||||||
|
|
||||||
log_printf("Mount SD partition\n");
|
|
||||||
mount_sd_fat("sd");
|
|
||||||
log_printf("Start main application\n");
|
log_printf("Start main application\n");
|
||||||
Application::instance()->exec();
|
Application::instance()->exec();
|
||||||
|
|
||||||
Application::destroyInstance();
|
Application::destroyInstance();
|
||||||
log_printf("Unmount SD\n");
|
|
||||||
unmount_sd_fat("sd");
|
log_deinit();
|
||||||
memoryRelease();
|
|
||||||
|
|
||||||
log_print("Going back to the Homebrew launcher\n");
|
|
||||||
|
|
||||||
log_deinit();
|
|
||||||
return EXIT_SUCCESS;
|
return EXIT_SUCCESS;
|
||||||
}
|
}
|
||||||
|
@ -2,7 +2,6 @@
|
|||||||
#define _MAIN_H_
|
#define _MAIN_H_
|
||||||
|
|
||||||
#include "common/types.h"
|
#include "common/types.h"
|
||||||
#include "dynamic_libs/os_functions.h"
|
|
||||||
|
|
||||||
/* Main */
|
/* Main */
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
@ -11,7 +10,7 @@ extern "C" {
|
|||||||
|
|
||||||
//! C wrapper for our C++ functions
|
//! C wrapper for our C++ functions
|
||||||
int Menu_Main(void);
|
int Menu_Main(void);
|
||||||
void deInit(void);
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -17,8 +17,6 @@
|
|||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
#include "MainWindow.h"
|
#include "MainWindow.h"
|
||||||
#include "MainWindowTV.h"
|
#include "MainWindowTV.h"
|
||||||
#include "dynamic_libs/os_functions.h"
|
|
||||||
#include "dynamic_libs/socket_functions.h"
|
|
||||||
#include "Application.h"
|
#include "Application.h"
|
||||||
#include "utils/StringTools.h"
|
#include "utils/StringTools.h"
|
||||||
#include "utils/logger.h"
|
#include "utils/logger.h"
|
||||||
|
@ -1,4 +1,3 @@
|
|||||||
#include <gctypes.h>
|
|
||||||
#include <malloc.h>
|
#include <malloc.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include "Resources.h"
|
#include "Resources.h"
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
#ifndef RECOURCES_H_
|
#ifndef RECOURCES_H_
|
||||||
#define RECOURCES_H_
|
#define RECOURCES_H_
|
||||||
|
|
||||||
|
|
||||||
#include <map>
|
#include <map>
|
||||||
|
#include "common/types.h"
|
||||||
|
|
||||||
//! forward declaration
|
//! forward declaration
|
||||||
class GuiImageData;
|
class GuiImageData;
|
||||||
|
@ -9,111 +9,110 @@
|
|||||||
#ifndef _FILELIST_H_
|
#ifndef _FILELIST_H_
|
||||||
#define _FILELIST_H_
|
#define _FILELIST_H_
|
||||||
|
|
||||||
#include <gctypes.h>
|
|
||||||
|
|
||||||
typedef struct _RecourceFile
|
typedef struct _RecourceFile
|
||||||
{
|
{
|
||||||
const char *filename;
|
const char *filename;
|
||||||
const u8 *DefaultFile;
|
const unsigned char *DefaultFile;
|
||||||
const u32 &DefaultFileSize;
|
const unsigned int &DefaultFileSize;
|
||||||
u8 *CustomFile;
|
unsigned char *CustomFile;
|
||||||
u32 CustomFileSize;
|
unsigned int CustomFileSize;
|
||||||
} RecourceFile;
|
} RecourceFile;
|
||||||
|
|
||||||
extern const u8 bg_back_png[];
|
extern const unsigned char bgMusic_ogg[];
|
||||||
extern const u32 bg_back_png_size;
|
extern const unsigned int bgMusic_ogg_size;
|
||||||
|
|
||||||
extern const u8 bg_front_png[];
|
extern const unsigned char bg_back_png[];
|
||||||
extern const u32 bg_front_png_size;
|
extern const unsigned int bg_back_png_size;
|
||||||
|
|
||||||
extern const u8 bgMusic_ogg[];
|
extern const unsigned char bg_front_png[];
|
||||||
extern const u32 bgMusic_ogg_size;
|
extern const unsigned int bg_front_png_size;
|
||||||
|
|
||||||
extern const u8 button_click_mp3[];
|
extern const unsigned char button_click_mp3[];
|
||||||
extern const u32 button_click_mp3_size;
|
extern const unsigned int button_click_mp3_size;
|
||||||
|
|
||||||
extern const u8 flappy_bird_1_png[];
|
extern const unsigned char flappy_bird_1_png[];
|
||||||
extern const u32 flappy_bird_1_png_size;
|
extern const unsigned int flappy_bird_1_png_size;
|
||||||
|
|
||||||
extern const u8 flappy_bird_2_png[];
|
extern const unsigned char flappy_bird_2_png[];
|
||||||
extern const u32 flappy_bird_2_png_size;
|
extern const unsigned int flappy_bird_2_png_size;
|
||||||
|
|
||||||
extern const u8 flappy_bird_3_png[];
|
extern const unsigned char flappy_bird_3_png[];
|
||||||
extern const u32 flappy_bird_3_png_size;
|
extern const unsigned int flappy_bird_3_png_size;
|
||||||
|
|
||||||
extern const u8 flappy_bird_4_png[];
|
extern const unsigned char flappy_bird_4_png[];
|
||||||
extern const u32 flappy_bird_4_png_size;
|
extern const unsigned int flappy_bird_4_png_size;
|
||||||
|
|
||||||
extern const u8 font_big_0_png[];
|
extern const unsigned char font_ttf[];
|
||||||
extern const u32 font_big_0_png_size;
|
extern const unsigned int font_ttf_size;
|
||||||
|
|
||||||
extern const u8 font_big_1_png[];
|
extern const unsigned char font_big_0_png[];
|
||||||
extern const u32 font_big_1_png_size;
|
extern const unsigned int font_big_0_png_size;
|
||||||
|
|
||||||
extern const u8 font_big_2_png[];
|
extern const unsigned char font_big_1_png[];
|
||||||
extern const u32 font_big_2_png_size;
|
extern const unsigned int font_big_1_png_size;
|
||||||
|
|
||||||
extern const u8 font_big_3_png[];
|
extern const unsigned char font_big_2_png[];
|
||||||
extern const u32 font_big_3_png_size;
|
extern const unsigned int font_big_2_png_size;
|
||||||
|
|
||||||
extern const u8 font_big_4_png[];
|
extern const unsigned char font_big_3_png[];
|
||||||
extern const u32 font_big_4_png_size;
|
extern const unsigned int font_big_3_png_size;
|
||||||
|
|
||||||
extern const u8 font_big_5_png[];
|
extern const unsigned char font_big_4_png[];
|
||||||
extern const u32 font_big_5_png_size;
|
extern const unsigned int font_big_4_png_size;
|
||||||
|
|
||||||
extern const u8 font_big_6_png[];
|
extern const unsigned char font_big_5_png[];
|
||||||
extern const u32 font_big_6_png_size;
|
extern const unsigned int font_big_5_png_size;
|
||||||
|
|
||||||
extern const u8 font_big_7_png[];
|
extern const unsigned char font_big_6_png[];
|
||||||
extern const u32 font_big_7_png_size;
|
extern const unsigned int font_big_6_png_size;
|
||||||
|
|
||||||
extern const u8 font_big_8_png[];
|
extern const unsigned char font_big_7_png[];
|
||||||
extern const u32 font_big_8_png_size;
|
extern const unsigned int font_big_7_png_size;
|
||||||
|
|
||||||
extern const u8 font_big_9_png[];
|
extern const unsigned char font_big_8_png[];
|
||||||
extern const u32 font_big_9_png_size;
|
extern const unsigned int font_big_8_png_size;
|
||||||
|
|
||||||
extern const u8 font_big_null_png[];
|
extern const unsigned char font_big_9_png[];
|
||||||
extern const u32 font_big_null_png_size;
|
extern const unsigned int font_big_9_png_size;
|
||||||
|
|
||||||
extern const u8 font_ttf[];
|
extern const unsigned char font_big_null_png[];
|
||||||
extern const u32 font_ttf_size;
|
extern const unsigned int font_big_null_png_size;
|
||||||
|
|
||||||
extern const u8 loose_png[];
|
extern const unsigned char loose_png[];
|
||||||
extern const u32 loose_png_size;
|
extern const unsigned int loose_png_size;
|
||||||
|
|
||||||
extern const u8 pipe_down_png[];
|
extern const unsigned char pipe_down_png[];
|
||||||
extern const u32 pipe_down_png_size;
|
extern const unsigned int pipe_down_png_size;
|
||||||
|
|
||||||
extern const u8 pipe_up_png[];
|
extern const unsigned char pipe_up_png[];
|
||||||
extern const u32 pipe_up_png_size;
|
extern const unsigned int pipe_up_png_size;
|
||||||
|
|
||||||
extern const u8 sfx_die_ogg[];
|
extern const unsigned char sfx_die_ogg[];
|
||||||
extern const u32 sfx_die_ogg_size;
|
extern const unsigned int sfx_die_ogg_size;
|
||||||
|
|
||||||
extern const u8 sfx_point_ogg[];
|
extern const unsigned char sfx_point_ogg[];
|
||||||
extern const u32 sfx_point_ogg_size;
|
extern const unsigned int sfx_point_ogg_size;
|
||||||
|
|
||||||
extern const u8 sfx_swooshing_ogg[];
|
extern const unsigned char sfx_swooshing_ogg[];
|
||||||
extern const u32 sfx_swooshing_ogg_size;
|
extern const unsigned int sfx_swooshing_ogg_size;
|
||||||
|
|
||||||
extern const u8 sfx_wing_ogg[];
|
extern const unsigned char sfx_wing_ogg[];
|
||||||
extern const u32 sfx_wing_ogg_size;
|
extern const unsigned int sfx_wing_ogg_size;
|
||||||
|
|
||||||
extern const u8 splash_png[];
|
extern const unsigned char splash_png[];
|
||||||
extern const u32 splash_png_size;
|
extern const unsigned int splash_png_size;
|
||||||
|
|
||||||
static RecourceFile RecourceList[] =
|
static RecourceFile RecourceList[] =
|
||||||
{
|
{
|
||||||
|
{"bgMusic.ogg", bgMusic_ogg, bgMusic_ogg_size, NULL, 0},
|
||||||
{"bg_back.png", bg_back_png, bg_back_png_size, NULL, 0},
|
{"bg_back.png", bg_back_png, bg_back_png_size, NULL, 0},
|
||||||
{"bg_front.png", bg_front_png, bg_front_png_size, NULL, 0},
|
{"bg_front.png", bg_front_png, bg_front_png_size, NULL, 0},
|
||||||
{"bgMusic.ogg", bgMusic_ogg, bgMusic_ogg_size, NULL, 0},
|
|
||||||
{"button_click.mp3", button_click_mp3, button_click_mp3_size, NULL, 0},
|
{"button_click.mp3", button_click_mp3, button_click_mp3_size, NULL, 0},
|
||||||
{"flappy_bird_1.png", flappy_bird_1_png, flappy_bird_1_png_size, NULL, 0},
|
{"flappy_bird_1.png", flappy_bird_1_png, flappy_bird_1_png_size, NULL, 0},
|
||||||
{"flappy_bird_2.png", flappy_bird_2_png, flappy_bird_2_png_size, NULL, 0},
|
{"flappy_bird_2.png", flappy_bird_2_png, flappy_bird_2_png_size, NULL, 0},
|
||||||
{"flappy_bird_3.png", flappy_bird_3_png, flappy_bird_3_png_size, NULL, 0},
|
{"flappy_bird_3.png", flappy_bird_3_png, flappy_bird_3_png_size, NULL, 0},
|
||||||
{"flappy_bird_4.png", flappy_bird_4_png, flappy_bird_4_png_size, NULL, 0},
|
{"flappy_bird_4.png", flappy_bird_4_png, flappy_bird_4_png_size, NULL, 0},
|
||||||
|
{"font.ttf", font_ttf, font_ttf_size, NULL, 0},
|
||||||
{"font_big_0.png", font_big_0_png, font_big_0_png_size, NULL, 0},
|
{"font_big_0.png", font_big_0_png, font_big_0_png_size, NULL, 0},
|
||||||
{"font_big_1.png", font_big_1_png, font_big_1_png_size, NULL, 0},
|
{"font_big_1.png", font_big_1_png, font_big_1_png_size, NULL, 0},
|
||||||
{"font_big_2.png", font_big_2_png, font_big_2_png_size, NULL, 0},
|
{"font_big_2.png", font_big_2_png, font_big_2_png_size, NULL, 0},
|
||||||
@ -125,7 +124,6 @@ static RecourceFile RecourceList[] =
|
|||||||
{"font_big_8.png", font_big_8_png, font_big_8_png_size, NULL, 0},
|
{"font_big_8.png", font_big_8_png, font_big_8_png_size, NULL, 0},
|
||||||
{"font_big_9.png", font_big_9_png, font_big_9_png_size, NULL, 0},
|
{"font_big_9.png", font_big_9_png, font_big_9_png_size, NULL, 0},
|
||||||
{"font_big_null.png", font_big_null_png, font_big_null_png_size, NULL, 0},
|
{"font_big_null.png", font_big_null_png, font_big_null_png_size, NULL, 0},
|
||||||
{"font.ttf", font_ttf, font_ttf_size, NULL, 0},
|
|
||||||
{"loose.png", loose_png, loose_png_size, NULL, 0},
|
{"loose.png", loose_png, loose_png_size, NULL, 0},
|
||||||
{"pipe_down.png", pipe_down_png, pipe_down_png_size, NULL, 0},
|
{"pipe_down.png", pipe_down_png, pipe_down_png_size, NULL, 0},
|
||||||
{"pipe_up.png", pipe_up_png, pipe_up_png_size, NULL, 0},
|
{"pipe_up.png", pipe_up_png, pipe_up_png_size, NULL, 0},
|
||||||
|
@ -23,6 +23,7 @@
|
|||||||
*
|
*
|
||||||
* for WiiXplorer 2010
|
* for WiiXplorer 2010
|
||||||
***************************************************************************/
|
***************************************************************************/
|
||||||
|
#include <unistd.h>
|
||||||
#include <malloc.h>
|
#include <malloc.h>
|
||||||
#include "utils/utils.h"
|
#include "utils/utils.h"
|
||||||
#include "BufferCircle.hpp"
|
#include "BufferCircle.hpp"
|
||||||
|
@ -27,7 +27,7 @@
|
|||||||
#define BUFFER_CIRCLE_HPP_
|
#define BUFFER_CIRCLE_HPP_
|
||||||
|
|
||||||
#include <vector>
|
#include <vector>
|
||||||
#include <gctypes.h>
|
#include "common/types.h"
|
||||||
|
|
||||||
class BufferCircle
|
class BufferCircle
|
||||||
{
|
{
|
||||||
|
@ -29,7 +29,7 @@
|
|||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include <malloc.h>
|
#include <malloc.h>
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
#include "dynamic_libs/os_functions.h"
|
#include "common/types.h"
|
||||||
#include "Mp3Decoder.hpp"
|
#include "Mp3Decoder.hpp"
|
||||||
|
|
||||||
Mp3Decoder::Mp3Decoder(const char * filepath)
|
Mp3Decoder::Mp3Decoder(const char * filepath)
|
||||||
|
@ -25,7 +25,6 @@
|
|||||||
***************************************************************************/
|
***************************************************************************/
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include <malloc.h>
|
#include <malloc.h>
|
||||||
#include "dynamic_libs/os_functions.h"
|
|
||||||
#include "OggDecoder.hpp"
|
#include "OggDecoder.hpp"
|
||||||
|
|
||||||
static int ogg_read(void * punt, int bytes, int blocks, int *f)
|
static int ogg_read(void * punt, int bytes, int blocks, int *f)
|
||||||
|
@ -14,11 +14,10 @@
|
|||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
#include <gctypes.h>
|
|
||||||
#include <malloc.h>
|
#include <malloc.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include "dynamic_libs/os_functions.h"
|
#include <coreinit/cache.h>
|
||||||
#include "SoundDecoder.hpp"
|
#include "SoundDecoder.hpp"
|
||||||
|
|
||||||
static const u32 FixedPointShift = 15;
|
static const u32 FixedPointShift = 15;
|
||||||
|
@ -26,7 +26,6 @@
|
|||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include <malloc.h>
|
#include <malloc.h>
|
||||||
#include "common/common.h"
|
#include "common/common.h"
|
||||||
#include "dynamic_libs/ax_functions.h"
|
|
||||||
#include "fs/CFile.hpp"
|
#include "fs/CFile.hpp"
|
||||||
#include "SoundHandler.hpp"
|
#include "SoundHandler.hpp"
|
||||||
#include "WavDecoder.hpp"
|
#include "WavDecoder.hpp"
|
||||||
@ -95,7 +94,11 @@ void SoundHandler::RemoveDecoder(int voice)
|
|||||||
if(voiceList[voice]->getState() != Voice::STATE_STOP)
|
if(voiceList[voice]->getState() != Voice::STATE_STOP)
|
||||||
voiceList[voice]->setState(Voice::STATE_STOP);
|
voiceList[voice]->setState(Voice::STATE_STOP);
|
||||||
|
|
||||||
while(voiceList[voice]->getState() != Voice::STATE_STOPPED)
|
// it shouldn't take longer than 3 ms actually but we wait up to 20
|
||||||
|
// on application quit the AX frame callback is not called anymore
|
||||||
|
// therefore this would end in endless loop if no timeout is defined
|
||||||
|
int timeOut = 20;
|
||||||
|
while(--timeOut && (voiceList[voice]->getState() != Voice::STATE_STOPPED))
|
||||||
usleep(1000);
|
usleep(1000);
|
||||||
}
|
}
|
||||||
SoundDecoder *decoder = DecoderList[voice];
|
SoundDecoder *decoder = DecoderList[voice];
|
||||||
@ -216,19 +219,16 @@ SoundDecoder * SoundHandler::GetSoundDecoder(const u8 * sound, int length)
|
|||||||
|
|
||||||
void SoundHandler::executeThread()
|
void SoundHandler::executeThread()
|
||||||
{
|
{
|
||||||
// v2 sound lib can not properly end transition audio on old firmwares
|
|
||||||
if (OS_FIRMWARE >= 400 && OS_FIRMWARE <= 410)
|
|
||||||
{
|
|
||||||
ProperlyEndTransitionAudio();
|
|
||||||
}
|
|
||||||
|
|
||||||
//! initialize 48 kHz renderer
|
//! initialize 48 kHz renderer
|
||||||
u32 params[3] = { 1, 0, 0 };
|
AXInitParams params;
|
||||||
|
memset(¶ms, 0, sizeof(params));
|
||||||
|
params.renderer = AX_INIT_RENDERER_48KHZ;
|
||||||
|
|
||||||
if(AXInitWithParams != 0)
|
// TODO: handle support for 3.1.0 with dynamic libs instead of static linking it
|
||||||
AXInitWithParams(params);
|
//if(AXInitWithParams != 0)
|
||||||
else
|
AXInitWithParams(¶ms);
|
||||||
AXInit();
|
//else
|
||||||
|
// AXInit();
|
||||||
|
|
||||||
// The problem with last voice on 500 was caused by it having priority 0
|
// The problem with last voice on 500 was caused by it having priority 0
|
||||||
// We would need to change this priority distribution if for some reason
|
// We would need to change this priority distribution if for some reason
|
||||||
@ -239,7 +239,7 @@ void SoundHandler::executeThread()
|
|||||||
voiceList[i] = new Voice(priority); // allocate voice 0 with highest priority
|
voiceList[i] = new Voice(priority); // allocate voice 0 with highest priority
|
||||||
}
|
}
|
||||||
|
|
||||||
AXRegisterFrameCallback((void*)&axFrameCallback);
|
AXRegisterAppFrameCallback(SoundHandler::axFrameCallback);
|
||||||
|
|
||||||
|
|
||||||
u16 i = 0;
|
u16 i = 0;
|
||||||
@ -266,7 +266,7 @@ void SoundHandler::executeThread()
|
|||||||
for(u32 i = 0; i < MAX_DECODERS; ++i)
|
for(u32 i = 0; i < MAX_DECODERS; ++i)
|
||||||
voiceList[i]->stop();
|
voiceList[i]->stop();
|
||||||
|
|
||||||
AXRegisterFrameCallback(NULL);
|
AXRegisterAppFrameCallback(NULL);
|
||||||
AXQuit();
|
AXQuit();
|
||||||
|
|
||||||
for(u32 i = 0; i < MAX_DECODERS; ++i)
|
for(u32 i = 0; i < MAX_DECODERS; ++i)
|
||||||
|
@ -27,7 +27,7 @@
|
|||||||
#define SOUNDHANDLER_H_
|
#define SOUNDHANDLER_H_
|
||||||
|
|
||||||
#include <vector>
|
#include <vector>
|
||||||
#include <gctypes.h>
|
#include "common/types.h"
|
||||||
#include "system/CThread.h"
|
#include "system/CThread.h"
|
||||||
#include "SoundDecoder.hpp"
|
#include "SoundDecoder.hpp"
|
||||||
#include "Voice.h"
|
#include "Voice.h"
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user