[What Was New 003]

- added: alphabetical file sorting
- added: background logo/backdrop + nicer menus
- added: scrolling in ROM selector
- fixed: switching between pal/ntsc ROMS doesn't mess up timings
- fixed: GC controller config works now
- fixed: freeze autoloading on ROM load
- fixed: zipped ROMS should now load in a reasonable time
- fixed: precompiled dols for autosaving to various locations (see readme)
- changed: GC default quickload slot (to sd) (thanks kerframil)
- changed: default load/save dirs are now "/snes9x/roms" and "/snes/save/"  (thanks kerframil)
- changed: Classic X and Y defaults aren't switched
- changed: if autosave is enabled, it doesn't ask to save SRAM anymore. It is saved in the background.
- updated README
This commit is contained in:
michniewski 2008-08-06 01:55:59 +00:00
parent 6892e8152e
commit dee563ab2d
22 changed files with 1504 additions and 463 deletions

View File

@ -1,4 +1,6 @@
.PHONY = all wii gc wii-clean gc-clean wii-run gc-run
.PHONY = all wii gc wii-clean gc-clean wii-run gc-run mca mcb sd smb mca-clean mcb-clean sd-clean smb-clean specials specials-clean
VERSION := 003
all: wii gc
@ -21,3 +23,42 @@ gc-clean:
gc-run:
$(MAKE) -f Makefile.gc run
# Custom Quicksave Versions
specials: sd mcb mca smb
specials-clean: mca-clean mcb-clean smb-clean sd-clean
mca:
touch source/ngc/snes9xGX.h
$(MAKE) "CUSTOMFLAGS:=-DQUICK_SAVE_SLOT=0" "LOADTYPE:='"MCSLOTA"'" "VERSION:=$(VERSION)" -f Makefile.wii
touch source/ngc/snes9xGX.h
$(MAKE) "CUSTOMFLAGS:=-DQUICK_SAVE_SLOT=0" "LOADTYPE:='"MCSLOTA"'" "VERSION:=$(VERSION)" -f Makefile.gc
mca-clean:
$(MAKE) "CUSTOMFLAGS:=-DQUICK_SAVE_SLOT=0" "LOADTYPE:='"MCSLOTA"'" "VERSION:=$(VERSION)" -f Makefile.wii clean
$(MAKE) "CUSTOMFLAGS:=-DQUICK_SAVE_SLOT=0" "LOADTYPE:='"MCSLOTA"'" "VERSION:=$(VERSION)" -f Makefile.gc clean
mcb:
touch source/ngc/snes9xGX.h
$(MAKE) "CUSTOMFLAGS:=-DQUICK_SAVE_SLOT=1" "LOADTYPE:='"MCSLOTB"'" "VERSION:=$(VERSION)" -f Makefile.wii
touch source/ngc/snes9xGX.h
$(MAKE) "CUSTOMFLAGS:=-DQUICK_SAVE_SLOT=1" "LOADTYPE:='"MCSLOTB"'" "VERSION:=$(VERSION)" -f Makefile.gc
mcb-clean:
$(MAKE) "CUSTOMFLAGS:=-DQUICK_SAVE_SLOT=1" "LOADTYPE:='"MCSLOTB"'" "VERSION:=$(VERSION)" -f Makefile.wii clean
$(MAKE) "CUSTOMFLAGS:=-DQUICK_SAVE_SLOT=1" "LOADTYPE:='"MCSLOTB"'" "VERSION:=$(VERSION)" -f Makefile.gc clean
sd:
touch source/ngc/snes9xGX.h
$(MAKE) "CUSTOMFLAGS:=-DQUICK_SAVE_SLOT=3" "LOADTYPE:='"SD"'" "VERSION:=$(VERSION)" -f Makefile.wii
touch source/ngc/snes9xGX.h
$(MAKE) "CUSTOMFLAGS:=-DQUICK_SAVE_SLOT=3" "LOADTYPE:='"SD"'" "VERSION:=$(VERSION)" -f Makefile.gc
sd-clean:
$(MAKE) "CUSTOMFLAGS:=-DQUICK_SAVE_SLOT=3" "LOADTYPE:='"SD"'" "VERSION:=$(VERSION)" -f Makefile.wii clean
$(MAKE) "CUSTOMFLAGS:=-DQUICK_SAVE_SLOT=3" "LOADTYPE:='"SD"'" "VERSION:=$(VERSION)" -f Makefile.gc clean
smb:
touch source/ngc/snes9xGX.h
$(MAKE) "CUSTOMFLAGS:=-DQUICK_SAVE_SLOT=4" "LOADTYPE:='"SMB"'" "VERSION:=$(VERSION)" -f Makefile.gc
smb-clean:
$(MAKE) "CUSTOMFLAGS:=-DQUICK_SAVE_SLOT=4" "LOADTYPE:='"SMB"'" "VERSION:=$(VERSION)" -f Makefile.gc clean

View File

@ -9,13 +9,16 @@ endif
include $(DEVKITPPC)/gamecube_rules
LOADTYPE = '"sd"'
VERSION = '"version"'
#---------------------------------------------------------------------------------
# TARGET is the name of the output
# BUILD is the directory where object files & intermediate files will be placed
# SOURCES is a list of directories containing source code
# INCLUDES is a list of directories containing extra header files
#---------------------------------------------------------------------------------
TARGET := snes9xgx-mm-gc
TARGET := executables/snes9xgx-$(VERSION)-$(LOADTYPE)-gc
BUILD := build_gc
SOURCES := source/snes9x source/unzip source/ngc source/smb
DATA := data
@ -25,18 +28,19 @@ INCLUDES := source/snes9x source/unzip source/ngc source/smb
# options for code generation
#---------------------------------------------------------------------------------
CUSTOMFLAGS = -DQUICK_SAVE_SLOT=1 -DSMB_SVID='"Crunchewy"' \
-DSMB_IP='"192.168.1.111"' -DGW_IP='"192.168.1.1"'
CFLAGS = -g -O2 -Wall $(MACHDEP) $(INCLUDE) \
-DNGC -DNO_ASM -DCPU_SHUTDOWN -DSPC700C \
-DSPC700_SHUTDOWN -DNEW_COLOUR_BLENDING \
-DNO_INLINE_GET_SET -DSDD1_DECOMP -DCORRECT_VRAM_READS \
-DDETECT_NASTY_FX_INTERLEAVE -DNGC_ZOOM -DSDUSE_LFN \
-DQUICK_SAVE_SLOT=4 -DSMB_SVID='"Crunchewy"' \
-DSMB_IP='"192.168.1.111"' -DGW_IP='"192.168.1.1"' -DFORCE_WII=0 \
-DFORCE_WII=0 $(CUSTOMFLAGS) \
-fomit-frame-pointer -fno-exceptions -Wno-unused-parameter -pipe
CXXFLAGS = $(CFLAGS)
LDFLAGS = -g $(MACHDEP) -Wl,-Map,$(notdir $@).map -Wl,--cref
# -mogc
#---------------------------------------------------------------------------------
# any extra libraries we wish to link with the project

View File

@ -9,13 +9,17 @@ endif
include $(DEVKITPPC)/wii_rules
LOADTYPE = '"sd"'
VERSION = '"version"'
#---------------------------------------------------------------------------------
# TARGET is the name of the output
# BUILD is the directory where object files & intermediate files will be placed
# SOURCES is a list of directories containing source code
# INCLUDES is a list of directories containing extra header files
#---------------------------------------------------------------------------------
TARGET := snes9xgx-mm-wii
TARGET := executables/snes9xgx-$(VERSION)-$(LOADTYPE)-wii
BUILD := build_wii
SOURCES := source/snes9x source/unzip source/ngc source/smb
DATA := data
@ -25,18 +29,19 @@ INCLUDES := source/snes9x source/unzip source/ngc source/smb
# options for code generation
#---------------------------------------------------------------------------------
CUSTOMFLAGS = -DQUICK_SAVE_SLOT=3 -DSMB_SVID='"Crunchewy"' \
-DSMB_IP='"192.168.1.111"' -DGW_IP='"192.168.1.1"'
CFLAGS = -g -O2 -Wall $(MACHDEP) $(INCLUDE) \
-DNGC -DHW_RVL -DNO_ASM -DCPU_SHUTDOWN -DSPC700C \
-DSPC700_SHUTDOWN -DNEW_COLOUR_BLENDING \
-DNO_INLINE_GET_SET -DSDD1_DECOMP -DCORRECT_VRAM_READS \
-DDETECT_NASTY_FX_INTERLEAVE -DNGC_ZOOM -DSDUSE_LFN \
-DQUICK_SAVE_SLOT=3 -DSMB_SVID='"Crunchewy"' \
-DSMB_IP='"192.168.1.111"' -DGW_IP='"192.168.1.1"' -DFORCE_WII=1 \
-DFORCE_WII=1 $(CUSTOMFLAGS)\
-fomit-frame-pointer -fno-exceptions -Wno-unused-parameter -pipe
CXXFLAGS = $(CFLAGS)
LDFLAGS = -g $(MACHDEP) -Wl,-Map,$(notdir $@).map -Wl,--cref
# -mogc
#---------------------------------------------------------------------------------
# any extra libraries we wish to link with the project

View File

@ -10,28 +10,30 @@
­———————————————————————————————————————————————————————————————————————•ßrK•
×—–­—–­—–­—–­ –­—–­—–­—–­—–­—–­—–­—–­—–­—–­— ­—–­—–­—–­—–­—–­—–­—–­—-­—–­-–•¬
|0O×øo· SNES9XGX v2.0.1b8 ·oø×O0|
|0O×øo· SNES9XGX v003 ·oø×O0|
`¨•¨¨¨¨¨ ¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨ ¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨ ¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨ ¨¨¨¨¨¨¨¨¨¨¨¨¨'
*******************************************************************************
PLEASE NOTE: THIS DOCUMENT IS A WORK IN PROGRESS - IT IS INCOMPLETE AND SOME OF
THE INFORMATION IS OUT OF DATE
*******************************************************************************
PLEASE NOTE: THIS DOCUMENT IS A WORK IN PROGRESS
Welcome to the revolution in GameCube emulators! SNES9X is by far the most
complete and accurate Super Nintendo Entertainment System emulator to date.
Taking full power of the ATi-GX chipset and packed full of features that are
to die for after playing your games you'll never want to come back to
reality.
[What's New 003]
SNES9X is a very popular open source emulator mainly for the PC platform, but
has seen many ports to other consoles such as the Nintendo DS, Microsoft XBOX
and now thanks to SoftDev the Nintendo GameCube! This is a straight port and
is not based on any previous SNES emulators that have existed for the
GameCube. You can get more information on SNES9X here from the below URL.
http://snes9x.ipherswipsite.com/
- added: alphabetical file sorting
- added: background logo/backdrop + nicer menus
- added: scrolling in ROM selector
- fixed: switching between pal/ntsc ROMS doesn't mess up timings
- fixed: GC controller config works now
- fixed: freeze autoloading on ROM load
- fixed: zipped ROMS should now load in a reasonable time
- fixed: precompiled dols for autosaving to various locations (see readme)
- changed: GC default quickload slot (to sd) (thanks kerframil)
- changed: default load/save dirs are now "/snes9x/roms" and
"/snes/save/" (thanks kerframil)
- changed: Classic X and Y defaults aren't switched
- changed: if autosave is enabled, it doesn't ask to save SRAM
anymore. It is saved in the background.
- updated README
[What's New 002]
[Whats Was New 002]
- added: classic and nunchuk support
- added: all controllers can now be configured
- added: GC version (untested)
@ -49,6 +51,227 @@ http://snes9x.ipherswipsite.com/
- fixed: autoload sram/freeze
- fixed: rom plays immediately after loading
[older update history at the bottom]
×—–­—–­—–­—–­ –­—–­—–­—–­—–­—–­—–­—–­—–­—–­— ­—–­—–­—–­—–­—–­—–­—–­—-­—–­-–•¬
|0O×øo· FEATURES ·oø×O0|
`¨•¨¨¨¨¨ ¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨ ¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨ ¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨ ¨¨¨¨¨¨¨¨¨¨¨¨¨'
- Based on Snes9x 1.5 - superior ROM compatibility
- Auto Load/Save Freeze States and SRAM
- Custom controller configurations
- Wiimote, Nunchuk, Classic, and Gamecube controller support
- Autodetect PAL/NTSC
- Zip Support
- Open Source!
×—–­—–­—–­—–­ –­—–­—–­—–­—–­—–­—–­—–­—–­—–­— ­—–­—–­—–­—–­—–­—–­—–­—-­—–­-–•¬
|0O×øo· SETUP & INSTALLATION ·oø×O0|
`¨•¨¨¨¨¨ ¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨ ¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨ ¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨ ¨¨¨¨¨¨¨¨¨¨¨¨¨'
Unzip the archive into a folder. You'll find 4 variations of the dol for both
wii and gamecube versions. The variants auto save and load preferences and sram
to/from different locations as follows (you can also manually save and load
SRAM to any location).
[A default version is provided for quick install. See loading from HBC below.]
filename preferences/sram autoloading location
------------------------- -------------------------------------
snes9xGX-003-sd-xxxx.dol SD card
snes9xGX-003-mcslota-xxxx.dol Memory card in slot A
snes9xGX-003-mcslotb-xxxx.dol Memory card in slot B
snes9xGX-003-smb-xxxx.dol SMB share (see SMB section below)
snes9xGX-003-noload-xxxx.dol none - doesn't load prefs nor autosave SRAM
The last part of the filename (shown above as xxxx), denotes the wii and gamecube
versions.
----------------------------
ROMS, Preferences, and Saves:
----------------------------
Your SNES rom images must be in the Super Magicom (SMC) or FIG format. Generally,
all images you find will be in this format, but if you run across one that isn't
please download RTOOL which will allow you to convert the image into SMC format.
Wii
----------
On the Wii, you can load roms from any SD card (Front SD, SD Gecko, etc).
By default, ROMs are loaded from "snes9x/roms/" and saves and preferences are
stored in "snes9x/saves/". Therefore, on your SD card, you should have the following
folders:
snes9x/
roms/
saves/
Gamecube
------------
You can load roms from DVD, SD card or SMB share. If you wish to use an SD card
or SMB share, you must create the same folder tree as above. Put your roms in the
"snes9x/roms" folder. On DVD you can either place your roms at the top level, or
optionally you may have an SNESROMS folder at the top level of the DVD, in which
case the game selectorwill default to showing that folder when first entered.
If you create a bootable DVD of Snes9xGx you can put roms on the same DVD.
------------------------------
Loading / Running the Emulator:
------------------------------
Via Homebrew Channel:
--------------------
The most popular method of running homebrew on the wii is through the Homebrew
Channel. If you already have the channel installed, just copy over the apps folder
included in the archive into the root of your SD card (the SD autosaving version
for wii is included in the apps/Snes9xGX/ folder renamed to boot.dol).
Remember to also create the snes9x/roms and snes9x/saves directories. See above.
If you wish to use a version that autosaves to other available saving locations,
just choose the appropriate dol, copy it into the apps/Snes9XGX/ folder, and
RENAME it to boot.dol (remove the other version). Then proceed to copy
the entire apps folder to your sd card and run it with the HBC.
If you haven't installed the homebrew channel yet, read about how to here:
http://hbc.hackmii.com/
Gamecube:
---------
You can load it via sdload and an SD card in slot A, or by streaming it to your
cube, or by booting a bootable DVD (gamecube only) with it on it. This document doesn't cover
how to do any of that. A good source for information on these topics is the
tehskeen forums:
http://www.tehskeen.com/forums/
×—–­—–­—–­—–­ –­—–­—–­—–­—–­—–­—–­—–­—–­—–­— ­—–­—–­—–­—–­—–­—–­—–­—-­—–­-–•¬
|0O×øo· ABOUT SNES9X ·oø×O0|
`¨•¨¨¨¨¨ ¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨ ¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨ ¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨ ¨¨¨¨¨¨¨¨¨¨¨¨¨'
Welcome to the revolution in GameCube emulators! SNES9X is by far the most
complete and accurate Super Nintendo Entertainment System emulator to date.
Taking full power of the ATi-GX chipset and packed full of features that are
to die for after playing your games you'll never want to come back to
reality.
SNES9X is a very popular open source emulator mainly for the PC platform, but
has seen many ports to other consoles such as the Nintendo DS, Microsoft XBOX
and now thanks to SoftDev the Nintendo GameCube! This is a straight port and
is not based on any previous SNES emulators that have existed for the
GameCube. You can get more information on SNES9X here from the below URL.
http://snes9x.ipherswipsite.com/
×—–­—–­—–­—–­ –­—–­—–­—–­—–­—–­—–­—–­—–­—–­— ­—–­—–­—–­—–­—–­—–­—–­—-­—–­-–•¬
|0O×øo· DEFAULT CONTROLLER MAPPING ·oø×O0|
`¨•¨¨¨¨¨ ¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨ ¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨ ¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨ ¨¨¨¨¨¨¨¨¨¨¨¨¨'
NOTE: You can change the controller configurations to your liking in the menu
under the Config Controllers option.
Below are the default button mappings for supported controllers. The wiimote
configuration allows you to play with the wiimote held sideways.
Wiimote SNES Nunchuk SNES
--------------------- ---------------------
1 Y Z Y
2 B B B
A A A A
B X C X
- SELECT 2 SELECT
+ START 1 START
HOME Emulator menu HOME Emulator menu
LT - LT
RT + RT
Classic SNES GC PAD SNES
--------------------- ---------------------
X X Y Y
B B B B
A A A A
Y Y X X
- SELECT Z SELECT
+ START START START
HOME Emulator menu
LT LT LT LT
RT RT RT RT
×—–­—–­—–­—–­ –­—–­—–­—–­—–­—–­—–­—–­—–­—–­— ­—–­—–­—–­—–­—–­—–­—–­—-­—–­-–•¬
|0O×øo· ZIP SUPPORT ·oø×O0|
`¨•¨¨¨¨¨ ¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨ ¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨ ¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨ ¨¨¨¨¨¨¨¨¨¨¨¨¨'
The Zip support in the emulator is courtesy of the zlib library. Currently,
it supports only the Inflate method.
The good news is that this is by far the most common zip method!
You should note also that this implementation assumes that the first file
in each archive is the required rom in smc/fig format.
In an attempt to save you time, we recommend using 7-Zip as the compressor,
as it gives a gain of 5-25% better compression over standard zips. This being
said, you can very well use WinZip or any other zip utility to create your zipped
ROMs.
To use 7-Zip compression on either linux or windows, use the following command:
7za a -tzip -mx=9 myrom.zip myrom.smc
×—–­—–­—–­—–­ –­—–­—–­—–­—–­—–­—–­—–­—–­—–­— ­—–­—–­—–­—–­—–­—–­—–­—-­—–­-–•¬
|0O×øo· MAIN MENU ·oø×O0|
`¨•¨¨¨¨¨ ¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨ ¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨ ¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨ ¨¨¨¨¨¨¨¨¨¨¨¨¨'
Once the DOL file is loaded you will be presented with main menu where you can
load a ROM, set options for the emulator, set the joypad configuration, save or
load freezes, manage SRAM, etc.
After loading a game the game will start running immediately. If you have the
auto-load SRAM option enabled it will automatically load SRAM (if it exists)
before starting play.
You can return to the main menu at any time by pressing
the c-stick (the yellow control stick) to the left, or by pressing L+R+X+Y.
Return to the game by selecting "Resume Game" or by pressing the B button until
play resumes.
×—–­—–­—–­—–­ –­—–­—–­—–­—–­—–­—–­—–­—–­—–­— ­—–­—–­—–­—–­—–­—–­—–­—-­—–­-–•¬
|0O×øo· TURBO MODE ·oø×O0|
`¨•¨¨¨¨¨ ¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨ ¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨ ¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨ ¨¨¨¨¨¨¨¨¨¨¨¨¨'
TurboMode increases the playback speed of the game by about 2x. To use TurboMode
simply press the c-stick (yellow control stick) to the right and hold it right
as long as you want playback to be double-speed. Release the c-stick when you
want normal playback speed to resume.
×—–­—–­—–­—–­ –­—–­—–­—–­—–­—–­—–­—–­—–­—–­— ­—–­—–­—–­—–­—–­—–­—–­—-­—–­-–•¬
|0O×øo· IMPORTING AND EXPORTING SRAM ·oø×O0|
`¨•¨¨¨¨¨ ¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨ ¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨ ¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨ ¨¨¨¨¨¨¨¨¨¨¨¨¨'
Snes9xGx 2.0.1 now includes the ability to load SRAM from Snes9x on other
platforms (Mac/PC/Linux/Etc) and to save back to those platforms. To use this
feature simply save or load SRAM to/from SD card or an SMB share.
The only thing to be aware of is that Snes9xGx requires that the SRM file have a
name that is the rom name (not necessarily the same as the file name!) with .SRM
at the end. For example, the game "Super Mario All-Stars + World" has a rom name
of "ALL_STARS + WORLD", so the SRAM file should have the name "ALL_STARS +
WORLD.srm". You can see the rom name for a game by loading the game - the rom
name is shown in the information that is briefly shown at the bottom of the
screen. A perhaps easier way to find the correct name is simply to load the game
and then save SRAM to SD or SMB and look at the filename that Snes9xGx uses.
That's the name you should use when importing an SRAM from another platform.
To use an Snes9xGx SRAM on another platform just do the opposite: save SRAM to
SD or SMB, and then copy that saved SRAM file to the other platform. You may
have to rename the file to be what that version of snes9x expects it to be.
×—–­—–­—–­—–­ –­—–­—–­—–­—–­—–­—–­—–­—–­—–­— ­—–­—–­—–­—–­—–­—–­—–­—-­—–­-–•¬
|0O×øo· UPDATE HISTORY (old) ·oø×O0|
`¨•¨¨¨¨¨ ¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨ ¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨ ¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨ ¨¨¨¨¨¨¨¨¨¨¨¨¨'
[What Was New 2.0.1b8]
* Added: SD slot B options for freezes, sram and loading of roms
* Changed: SMB options no longer displayed in menus when run on a Wii
@ -166,207 +389,6 @@ changes to the emulator settings again and save them.
* Analog Clip
* XenoGC Support (GC-Linux Homebrew DVD Compatibility)
×—–­—–­—–­—–­ –­—–­—–­—–­—–­—–­—–­—–­—–­—–­— ­—–­—–­—–­—–­—–­—–­—–­—-­—–­-–•¬
|0O×øo· SETUP & INSTALLATION ·oø×O0|
`¨•¨¨¨¨¨ ¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨ ¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨ ¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨ ¨¨¨¨¨¨¨¨¨¨¨¨¨'
Unzip the archive into a folder. You'll find 6 variations of the dol, along
with an "inject" tool for (optionally) injecting a rom into a dol. The six
variants auto save and load preferences and sram to/from different locations
as follows (you can also manually save and load SRAM to any location):
filename preferences/sram autoloading location
------------------------- -------------------------------------
snes9xGx201b8-mcslota.dol Memory card in slot A
snes9xGx201b8-mcslotb.dol Memory card in slot B
snes9xGx201b8-sdslota.dol SD card in SD adapter in slot A
snes9xGx201b8-sdslotb.dol SD card in SD adapter in slot B
snes9xGx201b8-smb.dol SMB share (see SMB section below)
snes9xGx201b8-noload.dol none - doesn't load prefs nor autosave SRAM
Your SNES rom images must be in the Super Magicom (SMC) or FIG format. Generally,
all images you find will be in this format, but if you run across one that isn't
please download RTOOL which will allow you to convert the image into SMC format.
You can load roms from DVD, SD card or SMB share. If you wish to use an SD card
or SMB share, you must create an SNESROMS and an SNESSAVE folder at the top
level (root) of the card or share. Put your roms in the SNESROMS folder. On DVD
you can either place your roms at the top level, or optionally you may have an
SNESROMS folder at the top level of the DVD, in which case the game selector
will default to showing that folder when first entered. If you create a bootable
DVD of Snes9xGx you can put roms on the same DVD.
Now that you have that set up all you need to do is load the dol of your choice.
You can load it via sdload and an SD card in slot A, or by streaming it to your
cube, or by booting a bootable DVD with it on it. This document doesn't cover
how to do any of that. A good source for information on these topics is the
tehskeen forums:
http://www.tehskeen.com/forums/
×—–­—–­—–­—–­ –­—–­—–­—–­—–­—–­—–­—–­—–­—–­— ­—–­—–­—–­—–­—–­—–­—–­—-­—–­-–•¬
|0O×øo· DEFAULT CONTROLLER MAPPING ·oø×O0|
`¨•¨¨¨¨¨ ¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨ ¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨ ¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨ ¨¨¨¨¨¨¨¨¨¨¨¨¨'
Wiimote SNES
---------------------
1 Y
2 B
A A
B X
- SELECT
+ START
HOME Emulator menu
LT
RT
This configuration allows you to play with the wiimote held sideways.
Nunchuk SNES
---------------------
Z Y
B B
A A
C X
2 SELECT
1 START
HOME Emulator menu
- LT
+ RT
Classic SNES
---------------------
X Y
B B
A A
Y X
- SELECT
+ START
HOME Emulator menu
LT LT
RT RT
GC PAD SNES
---------------------
Y Y
B B
A A
X X
Z SELECT
START START
LT LT
RT RT
×—–­—–­—–­—–­ –­—–­—–­—–­—–­—–­—–­—–­—–­—–­— ­—–­—–­—–­—–­—–­—–­—–­—-­—–­-–•¬
|0O×øo· PARTIAL PKZIP SUPPORT ·oø×O0|
`¨•¨¨¨¨¨ ¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨ ¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨ ¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨ ¨¨¨¨¨¨¨¨¨¨¨¨¨'
The Zip support in the emulator is courtesy of the zlib library. Currently,
it supports only the Inflate method.
The good news is that this is by far the most common zip method!
You should note also that this implementation assumes that the first file
in each archive is the required rom in smc/fig format.
In an attempt to save you time, we recommend using 7-Zip as the compressor,
as it gives a gain of 5-25% better compression over standard zips.
To use 7-Zip compression on either linux or windows, use the following command:
7za a -tzip -mx=9 myrom.zip myrom.smc
×—–­—–­—–­—–­ –­—–­—–­—–­—–­—–­—–­—–­—–­—–­— ­—–­—–­—–­—–­—–­—–­—–­—-­—–­-–•¬
|0O×øo· MAIN MENU ·oø×O0|
`¨•¨¨¨¨¨ ¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨ ¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨ ¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨ ¨¨¨¨¨¨¨¨¨¨¨¨¨'
Once the DOL file is loaded you will be presented with main menu where you can
load a rom from DVD, SD or SMB, set options for the emulator, set the joypad
configuration (on a per-game basis), save or load freezes, manage SRAM, etc.
After loading a game the game will start running immediately. If you have the
auto-load SRAM option enabled it will automatically load SRAM (if it exists)
before starting play. You can return to the main menu at any time by pressing
the c-stick (the yellow control stick) to the left, or by pressing L+R+X+Y.
Return to the game by selecting "Resume Game" or by pressing the B button until
play resumes.
×—–­—–­—–­—–­ –­—–­—–­—–­—–­—–­—–­—–­—–­—–­— ­—–­—–­—–­—–­—–­—–­—–­—-­—–­-–•¬
|0O×øo· TURBO MODE ·oø×O0|
`¨•¨¨¨¨¨ ¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨ ¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨ ¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨ ¨¨¨¨¨¨¨¨¨¨¨¨¨'
TurboMode increases the playback speed of the game by about 2x. To use TurboMode
simply press the c-stick (yellow control stick) to the right and hold it right
as long as you want playback to be double-speed. Release the c-stick when you
want normal playback speed to resume.
×—–­—–­—–­—–­ –­—–­—–­—–­—–­—–­—–­—–­—–­—–­— ­—–­—–­—–­—–­—–­—–­—–­—-­—–­-–•¬
|0O×øo· IMPORTING AND EXPORTING SRAM ·oø×O0|
`¨•¨¨¨¨¨ ¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨ ¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨ ¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨ ¨¨¨¨¨¨¨¨¨¨¨¨¨'
Snes9xGx 2.0.1 now includes the ability to load SRAM from Snes9x on other
platforms (Mac/PC/Linux/Etc) and to save back to those platforms. To use this
feature simply save or load SRAM to/from SD card or an SMB share.
The only thing to be aware of is that Snes9xGx requires that the SRM file have a
name that is the rom name (not necessarily the same as the file name!) with .SRM
at the end. For example, the game "Super Mario All-Stars + World" has a rom name
of "ALL_STARS + WORLD", so the SRAM file should have the name "ALL_STARS +
WORLD.srm". You can see the rom name for a game by loading the game - the rom
name is shown in the information that is briefly shown at the bottom of the
screen. A perhaps easier way to find the correct name is simply to load the game
and then save SRAM to SD or SMB and look at the filename that Snes9xGx uses.
That's the name you should use when importing an SRAM from another platform.
To use an Snes9xGx SRAM on another platform just do the opposite: save SRAM to
SD or SMB, and then copy that saved SRAM file to the other platform. You may
have to rename the file to be what that version of snes9x expects it to be.
×—–­—–­—–­—–­ –­—–­—–­—–­—–­—–­—–­—–­—–­—–­— ­—–­—–­—–­—–­—–­—–­—–­—-­—–­-–•¬
|0O×øo· INJECTING A ROM ·oø×O0|
`¨•¨¨¨¨¨ ¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨ ¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨ ¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨ ¨¨¨¨¨¨¨¨¨¨¨¨¨'
Injecting a rom is not required to use snes9xGx, but if you primarily use
snes9xGx by streaming it to your cube you may wish to inject a rom into the dol.
In that case the game will start playing immediately once Snes9xGx loads. If you
have the auto-load SRAM option enabled it will load SRAM before starting the
game as well.
To inject a rom you use the "inject.exe" tool on Windows or the "inject" tool on
Mac OS X. This tool works at the command line and has syntax as follows:
inject original.dol gamerom.smc output.dol
On the Mac you will either need to copy the inject tool into a location that is
in your "PATH" or just go into the directory that has the inject tool in it and
proceed the command with "./" like this:
./inject original.dol gamerom.smc output.dol
Once you run the tool on your dol, just stream the outputted dol to your cube,
or otherwise load it and Snes9xGx will load and the game will start running.
×—–­—–­—–­—–­ –­—–­—–­—–­—–­—–­—–­—–­—–­—–­— ­—–­—–­—–­—–­—–­—–­—–­—-­—–­-–•¬
|0O×øo· WAVEBIRD WIRELESS CONTROLLER ·oø×O0|
`¨•¨¨¨¨¨ ¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨ ¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨ ¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨ ¨¨¨¨¨¨¨¨¨¨¨¨¨'
This note applies to all homebrew GC software. The Wavebird wireless controller
CAN be used with homebrew, including Snes9xGx, but to enable it you must press a
button on the controller when you power up the GC and see the Gamecube logo.
This will initialize the controller and allow it to function in Snes9xGx and
other homebrew software.
You must do this each time you power up your Gamecube. Also, if you unplug the
wireless receiver while Snes9xGx is running and plug it back in, it will not
work - you will then have to plug in a wired controller to continue play. Until
someone figures out how to properly handle the Wavebird, this will continue to
be the case. My ears are open!
×—–­—–­—–­—–­ –­—–­—–­—–­—–­—–­—–­—–­—–­—–­— ­—–­—–­—–­—–­—–­—–­—–­—-­—–­-–•¬
|0O×øo· SMB ·oø×O0|
`¨•¨¨¨¨¨ ¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨ ¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨ ¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨ ¨¨¨¨¨¨¨¨¨¨¨¨¨'
TBD
×—–­—–­—–­—–­ –­—–­—–­—–­—–­—–­—–­—–­—–­—–­— ­—–­—–­—–­—–­—–­—–­—–­—-­—–­-–•¬
|0O×øo· CREDITS ·oø×O0|
@ -378,10 +400,9 @@ TBD
GameCube Port 2.0 WIP6 and earlier - SoftDev
Additional improvements to 2.0 WIP6 - eke-eke
GameCube 2.0.1bx enhancements - crunchy2
v001 updates - michniewski
v00x updates - michniewski
GX - http://www.gc-linux.org
Font - Qoob Team
libogc - Shagkur
libogc - Shagkur & wintermute
Testing
@ -389,9 +410,8 @@ TBD
Documentation
original by brakken/updated by crunchy2
brakken, crunchy2, michniewski
×—–­—–­—–­—–­ –­—–­—–­—–­—–­—–­—–­—–­—–­—–­— ­—–­—–­—–­—–­—–­—–­—–­—-­—–­-–•¬
|0O×øo· SNES9XGX v2.0.1b8 ·oø×O0|
|0O×øo· ·oø×O0|
`¨•¨¨¨¨¨ ¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨ ¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨ ¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨ ¨¨¨¨¨¨¨¨¨¨¨¨¨'

View File

@ -31,7 +31,7 @@
#include "ftfont.h"
#include "video.h"
#include "aram.h"
#include "ngcunzip.h"
#include "unzip.h"
#include "filesel.h"
#include "smbload.h"
#include "sdload.h"
@ -140,13 +140,17 @@ int selection = 0;
int
FileSelector ()
{
u32 p, wp;
signed char a;
u32 p, wp, ph, wh;
signed char a, c;
int haverom = 0;
int redraw = 1;
int selectit = 0;
float mag = 0;
u16 ang = 0;
int scroll_delay = 0;
bool move_selection = 0;
#define SCROLL_INITIAL_DELAY 15
#define SCROLL_LOOP_DELAY 4
while (haverom == 0)
{
@ -154,17 +158,25 @@ FileSelector ()
ShowFiles (offset, selection);
redraw = 0;
VIDEO_WaitVSync(); // slow things down a bit so we don't overread the pads
p = PAD_ButtonsDown (0);
ph = PAD_ButtonsHeld (0);
#ifdef HW_RVL
wp = WPAD_ButtonsDown (0);
wh = WPAD_ButtonsHeld (0);
wpad_get_analogues(0, &mag, &ang); // get joystick info from wii expansions
#else
wp = 0;
wh = 0;
#endif
a = PAD_StickY (0);
c = PAD_SubStickX (0);
VIDEO_WaitVSync(); // slow things down a bit so we don't overread the pads
/*** Check for exit combo ***/
if ( (c < -70) || (wp & WPAD_BUTTON_HOME) || (wp & WPAD_CLASSIC_BUTTON_HOME) ) return 0;
/*** Check buttons, perform actions ***/
if ( (p & PAD_BUTTON_A) || selectit || (wp & (WPAD_BUTTON_A | WPAD_CLASSIC_BUTTON_A)) )
{
if ( selectit )
@ -274,28 +286,57 @@ FileSelector ()
return 0;
}
} // End of B
if ( (p & PAD_BUTTON_DOWN) || (wp & (WPAD_BUTTON_DOWN | WPAD_CLASSIC_BUTTON_DOWN)) || (a < -PADCAL) || (mag>JOY_THRESHOLD && (ang>130 && ang<230)) )
if ( ((p | ph) & PAD_BUTTON_DOWN) || ((wp | wh) & (WPAD_BUTTON_DOWN | WPAD_CLASSIC_BUTTON_DOWN)) || (a < -PADCAL) || (mag>JOY_THRESHOLD && (ang>130 && ang<230)) )
{
selection++;
if (selection == maxfiles)
selection = offset = 0;
if ((selection - offset) >= PAGESIZE)
offset += PAGESIZE;
redraw = 1;
if ( (p & PAD_BUTTON_DOWN) || (wp & (WPAD_BUTTON_DOWN | WPAD_CLASSIC_BUTTON_DOWN)) ) { /*** Button just pressed ***/
scroll_delay = SCROLL_INITIAL_DELAY; // reset scroll delay.
move_selection = 1; //continue (move selection)
}
else if (scroll_delay == 0) { /*** Button is held ***/
scroll_delay = SCROLL_LOOP_DELAY;
move_selection = 1; //continue (move selection)
} else {
scroll_delay--; // wait
}
if (move_selection)
{
selection++;
if (selection == maxfiles)
selection = offset = 0;
if ((selection - offset) >= PAGESIZE)
offset += PAGESIZE;
redraw = 1;
move_selection = 0;
}
} // End of down
if ( (p & PAD_BUTTON_UP) || (wp & (WPAD_BUTTON_UP | WPAD_CLASSIC_BUTTON_UP)) || (a > PADCAL) || (mag>JOY_THRESHOLD && (ang>300 || ang<50)) )
if ( ((p | ph) & PAD_BUTTON_UP) || ((wp | wh) & (WPAD_BUTTON_UP | WPAD_CLASSIC_BUTTON_UP)) || (a > PADCAL) || (mag>JOY_THRESHOLD && (ang>300 || ang<50)) )
{
selection--;
if (selection < 0)
{
selection = maxfiles - 1;
offset = selection - PAGESIZE + 1;
}
if (selection < offset)
offset -= PAGESIZE;
if (offset < 0)
offset = 0;
redraw = 1;
if ( (p & PAD_BUTTON_UP) || (wp & (WPAD_BUTTON_UP | WPAD_CLASSIC_BUTTON_UP)) ) { /*** Button just pressed***/
scroll_delay = SCROLL_INITIAL_DELAY; // reset scroll delay.
move_selection = 1; //continue (move selection)
}
else if (scroll_delay == 0) { /*** Button is held ***/
scroll_delay = SCROLL_LOOP_DELAY;
move_selection = 1; //continue (move selection)
} else {
scroll_delay--; // wait
}
if (move_selection)
{
selection--;
if (selection < 0) {
selection = maxfiles - 1;
offset = selection - PAGESIZE + 1;
}
if (selection < offset)
offset -= PAGESIZE;
if (offset < 0)
offset = 0;
redraw = 1;
move_selection = 0;
}
} // End of Up
if ( (p & PAD_BUTTON_LEFT) || (wp & (WPAD_BUTTON_LEFT | WPAD_CLASSIC_BUTTON_LEFT)) )
{
@ -400,7 +441,7 @@ OpenSMB ()
* Function to load from an SD Card
*/
int
OpenSD (int slot)
OpenSD ()
{
char msg[80];
char buf[50] = "";
@ -412,8 +453,8 @@ OpenSD (int slot)
/* don't mess with DVD entries */
havedir = 0; // gamecube only
/* get current SDCARD directory */
sprintf ( currSDdir, getcwd(buf,50) ); // FIX: necessary?
/* change current dir to snes roms directory */
sprintf ( currSDdir, "%s/%s", ROOTSDDIR, SNESROMDIR );
/* Parse initial root directory and get entries list */
@ -425,7 +466,7 @@ OpenSD (int slot)
else
{
/* no entries found */
sprintf (msg, "SNESROMS not found on SDCARD"); // FIX: update error msg
sprintf (msg, "No Files Found!");
WaitPrompt (msg);
return 0;
}
@ -492,7 +533,7 @@ LoadDVDFile (unsigned char *buffer)
else
{
return UnZipBuffer (buffer, discoffset, rootdirlength);
return UnZipBuffer (buffer, discoffset, 1, NULL); // unzip from dvd
}
return rootdirlength;
}

View File

@ -12,12 +12,13 @@
int OpenDVD ();
int OpenSMB ();
int OpenSD (int slot);
int OpenSD ();
#define LOAD_DVD 1
#define LOAD_SMB 2
#define LOAD_SDC 4
#define SNESROMDIR "SNESROMS"
#define SNESSAVEDIR "SNESSAVE"
#define ROOTSDDIR "fat:/"
#define SNESROMDIR "snes9x/roms"
#define SNESSAVEDIR "snes9x/saves"
#endif

View File

@ -29,12 +29,13 @@
#include "video.h"
#include "ftfont.h"
#include "dkpro.h"
#include "tempgfx.h"
#include "snes9xGX.h"
#include "aram.h"
#include <zlib.h>
#include "gfx_bg.h"
/*** Globals ***/
FT_Library ftlibrary;
FT_Face face;
@ -228,7 +229,7 @@ licence ()
else
ypos += 24;
setfontsize (16); // FIX
setfontsize (16);
setfontcolour (0x00, 0x00, 0x00);
DrawText (-1, ypos += 40, (char*)"Snes9x - Copyright (c) Snes9x Team 1996 - 2006");
@ -237,7 +238,7 @@ licence ()
DrawText (-1, ypos += 20, (char*)"redistribute it under the conditions of the");
DrawText (-1, ypos += 20, (char*)"GNU GENERAL PUBLIC LICENSE Version 2");
DrawText (-1, ypos +=
20, (char*)"Additionally, the developers of this port disclaims");
20, (char*)"Additionally, the developers of this port disclaim");
DrawText (-1, ypos +=
20, (char*)"all copyright interests in the Nintendo GameCube");
DrawText (-1, ypos +=
@ -281,7 +282,7 @@ showdklogo ()
int w, h, p, dispoffset;
p = 0;
dispoffset =
((screenheight != 480 ? 360 : 350) * 320) + ((640 - dkpro_WIDTH) >> 2);
((screenheight != 480 ? 365 : 355) * 320) + ((640 - dkpro_WIDTH) >> 2);
dkunpack ();
@ -354,11 +355,11 @@ unpackbackdrop ()
/*** If it's PAL50, need to move down a few lines ***/
offset = ((screenheight - 480) >> 1) * 320;
inbytes = tempgfx_COMPRESSED;
outbytes = tempgfx_RAW;
inbytes = BG_COMPRESSED;
outbytes = BG_RAW;
res =
uncompress ((Bytef *) backdrop + offset, &outbytes, (Bytef *) tempgfx,
uncompress ((Bytef *) backdrop + offset, &outbytes, (Bytef *) bg,
inbytes);
#ifndef HW_RVL
@ -390,11 +391,11 @@ void
WaitButtonA ()
{
#ifdef HW_RVL
while ( (PAD_ButtonsDown (0) & PAD_BUTTON_A) || (WPAD_ButtonsDown(0) & (WPAD_BUTTON_A | WPAD_CLASSIC_BUTTON_A)) );
while (!(PAD_ButtonsDown (0) & PAD_BUTTON_A) && !(WPAD_ButtonsDown(0) & (WPAD_BUTTON_A | WPAD_CLASSIC_BUTTON_A)) );
while ( (PAD_ButtonsDown (0) & PAD_BUTTON_A) || (WPAD_ButtonsDown(0) & (WPAD_BUTTON_A | WPAD_CLASSIC_BUTTON_A)) ) VIDEO_WaitVSync();
while (!(PAD_ButtonsDown (0) & PAD_BUTTON_A) && !(WPAD_ButtonsDown(0) & (WPAD_BUTTON_A | WPAD_CLASSIC_BUTTON_A)) ) VIDEO_WaitVSync();
#else
while ( PAD_ButtonsDown (0) & PAD_BUTTON_A );
while (!(PAD_ButtonsDown (0) & PAD_BUTTON_A) );
while ( PAD_ButtonsDown (0) & PAD_BUTTON_A ) VIDEO_WaitVSync();
while (!(PAD_ButtonsDown (0) & PAD_BUTTON_A) ) VIDEO_WaitVSync();
#endif
}
@ -410,7 +411,7 @@ WaitButtonAB ()
while ( (PAD_ButtonsDown (0) & (PAD_BUTTON_A | PAD_BUTTON_B))
|| (WPAD_ButtonsDown(0) & (WPAD_BUTTON_A | WPAD_BUTTON_B | WPAD_CLASSIC_BUTTON_A | WPAD_CLASSIC_BUTTON_B))
);
) VIDEO_WaitVSync();
while ( TRUE )
{
@ -424,7 +425,7 @@ WaitButtonAB ()
#else
u32 gc_btns;
while ( (PAD_ButtonsDown (0) & (PAD_BUTTON_A | PAD_BUTTON_B)) );
while ( (PAD_ButtonsDown (0) & (PAD_BUTTON_A | PAD_BUTTON_B)) ) VIDEO_WaitVSync();
while ( TRUE )
{
@ -504,7 +505,7 @@ ShowAction (char *msg)
* Generic Menu Routines
****************************************************************************/
void
DrawMenu (char items[][20], char *title, int maxitems, int selected)
DrawMenu (char items[][20], char *title, int maxitems, int selected, int fontsize)
{
int i, w;
int ypos;
@ -516,7 +517,8 @@ DrawMenu (char items[][20], char *title, int maxitems, int selected)
};
#endif
ypos = (screenheight - (maxitems * 32)) >> 1;
//ypos = (screenheight - (maxitems * 32)) >> 1; previous
ypos = (screenheight - (maxitems * (fontsize + 8))) >> 1;
if (screenheight == 480)
ypos += 52;
@ -525,30 +527,36 @@ DrawMenu (char items[][20], char *title, int maxitems, int selected)
clearscreen ();
#if 0
DrawPolygon (4, bounding, 0x00, 0x00, 0xc0);
DrawPolygon (4, base, 0x00, 0x00, 0xc0);
setfontsize (32);
DrawText (-1, 80, title);
DrawText (-1, screenheight - 50, "Snes9x - GX 2.0");
#endif
//#if 0
// DrawPolygon (4, bounding, 0x00, 0x00, 0xc0);
// DrawPolygon (4, base, 0x00, 0x00, 0xc0);
setfontsize (30);
if (title != NULL)
DrawText (-1, 60, title);
setfontsize (12);
DrawText (510, screenheight - 20, "Snes9x GX 003");
//#endif
setfontsize (24);
setfontsize (fontsize); // set font size
setfontcolour (0, 0, 0);
for (i = 0; i < maxitems; i++)
{
if (i == selected)
{
for( w = 0; w < 32; w++ )
DrawLineFast( 30, 610, (i << 5) + (ypos-26) + w, 0x80, 0x80, 0x80 );
//for( w = 0; w < 32; w++ )
for( w = 0; w < (fontsize + 8); w++ )
//DrawLineFast( 30, 610, (i << 5) + (ypos-26) + w, 0x80, 0x80, 0x80 ); previous
DrawLineFast( 30, 610, i * (fontsize + 8) + (ypos-(fontsize + 2)) + w, 0x80, 0x80, 0x80 );
setfontcolour (0xff, 0xff, 0xff);
DrawText (-1, (i << 5) + ypos, items[i]);
//DrawText (-1, (i << 5) + ypos, items[i]); previous
DrawText (-1, i * (fontsize + 8) + ypos, items[i]);
setfontcolour (0x00, 0x00, 0x00);
}
else
DrawText (-1, i * 32 + ypos, items[i]);
DrawText (-1, i * (fontsize + 8) + ypos, items[i]);
//DrawText (-1, i * 32 + ypos, items[i]); previous
}
showscreen ();
@ -563,7 +571,7 @@ DrawMenu (char items[][20], char *title, int maxitems, int selected)
****************************************************************************/
int menu = 0;
int
RunMenu (char items[][20], int maxitems, char *title)
RunMenu (char items[][20], int maxitems, char *title, int fontsize)
{
int redraw = 1;
int quit = 0;
@ -578,7 +586,7 @@ RunMenu (char items[][20], int maxitems, char *title)
{
if (redraw)
{
DrawMenu (&items[0], title, maxitems, menu);
DrawMenu (&items[0], title, maxitems, menu, fontsize);
redraw = 0;
}

View File

@ -27,7 +27,8 @@ void legal ();
void highlight (int on);
void WaitButtonA ();
void setfontcolour (u8 r, u8 g, u8 b);
int RunMenu (char items[][20], int maxitems, char *title);
int RunMenu (char items[][20], int maxitems, char *title, int fontsize = 24);
void DrawMenu (char items[][20], char *title, int maxitems, int selected, int fontsize = 24);
void WaitPrompt (char *msg);
int WaitPromptChoice (char *msg, char* bmsg, char* amsg);
void ShowAction (char *msg);

691
source/ngc/gfx_bg.h Normal file
View File

@ -0,0 +1,691 @@
/*
* File : bg3.bmp
* Width : 640
* Height: 480
*/
#define BG_WIDTH (640)
#define BG_HEIGHT (480)
#define BG_RAW (614400)
#define BG_COMPRESSED (8789)
static unsigned char bg[]=
{
0x78,0x9c,0xed,0xdd,0x77,0xb0,0x94,0xf5,0xbd,0xf8,0x71,0x9d,0x4c,
0x26,0xe3,0x24,0x93,0xdc,0xeb,0xe4,0xc6,0x4b,0x20,0x89,0xf1,0xc6,
0x68,0x8c,0x28,0x18,0x31,0x51,0x2c,0x80,0xb1,0x05,0x84,0x83,0x68,
0xec,0x25,0x41,0x63,0x41,0x11,0xa4,0x6d,0x7b,0xbe,0xbb,0xdf,0xe7,
0xd9,0x3d,0x20,0x96,0x44,0xa3,0x46,0x13,0x1b,0x8a,0xd8,0x00,0xa5,
0x8a,0x8a,0x0a,0xa8,0x80,0x02,0x8a,0x8a,0x35,0xc4,0x82,0x68,0x40,
0x40,0x4a,0x72,0x6b,0xca,0xef,0xf7,0x9c,0x43,0x09,0xe6,0xf7,0xbb,
0xf7,0x9a,0x4a,0xf1,0xf5,0x9e,0x79,0xcd,0x39,0xbb,0xec,0xd9,0xf6,
0xc7,0x67,0xbe,0xdf,0xdd,0x67,0x97,0x5f,0x37,0x7e,0x5d,0xf8,0x35,
0x00,0x00,0x1f,0x1d,0xcd,0xbf,0x2e,0x02,0x00,0x00,0x00,0x00,0x00,
0x6c,0x67,0x0a,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x6c,0xfb,0x7e,
0xd5,0xf8,0xd5,0x16,0xb3,0xae,0xb1,0xaa,0xf0,0xcb,0xc6,0x92,0xe2,
0x92,0xc6,0xdb,0xc5,0xe5,0x8d,0xf7,0xb7,0xe8,0x7d,0x01,0xf8,0x7b,
0x59,0xd5,0x78,0xb3,0x38,0xbf,0x3e,0xb9,0x74,0x63,0x76,0x45,0x79,
0x64,0x76,0x75,0x79,0x74,0x36,0xbd,0xf4,0x52,0x7d,0x79,0x71,0xdd,
0x56,0x70,0xdf,0x00,0xfe,0x56,0xd6,0x35,0x96,0x16,0x66,0x65,0xd7,
0x96,0x2e,0x8a,0xbd,0x92,0x43,0x7e,0xdc,0xb1,0xdc,0xfe,0xa7,0xfb,
0x94,0x0e,0xac,0x9f,0x98,0xa4,0xd9,0xfd,0xe5,0x9f,0x37,0x56,0x6f,
0xf1,0xfb,0x07,0xf0,0xb7,0xf2,0x76,0x7d,0x72,0x71,0x50,0x76,0x68,
0xe5,0xa0,0x49,0x9d,0x86,0xb6,0x5f,0xb5,0x67,0xff,0xdd,0x7f,0xb5,
0xdb,0x85,0x5f,0x9c,0xf7,0xf9,0x41,0x7b,0x36,0x4e,0x4e,0x6e,0xcc,
0x16,0x95,0x56,0x6f,0x05,0xf7,0x11,0xe0,0xaf,0xef,0xbd,0xc2,0xc3,
0xd9,0x45,0xe5,0x4e,0xb7,0x1d,0x59,0xec,0xf4,0xef,0x5f,0xba,0xb0,
0xdd,0x6f,0xdb,0xf5,0x6b,0xfb,0x5f,0xed,0xfa,0xb5,0xfb,0xfd,0x97,
0xfa,0xb5,0x79,0xa8,0xcd,0xd0,0x5e,0xe9,0xcd,0x95,0xd7,0x1b,0xeb,
0xb6,0x82,0xfb,0x09,0xf0,0xd7,0xb5,0xae,0xfe,0x62,0x71,0x44,0x7a,
0x50,0xe5,0xd8,0x57,0xdb,0x0f,0x68,0xf7,0x5f,0x6d,0xf3,0xd9,0xd7,
0xf6,0xc2,0xb6,0xff,0xb9,0xde,0x17,0xd6,0xb6,0xb9,0xa8,0xdd,0x88,
0x73,0x2a,0x8f,0xd4,0x57,0x15,0xb7,0xf4,0xfd,0x04,0xf8,0x6b,0x5b,
0x59,0x9f,0x56,0x3c,0xf9,0xaa,0xae,0xe5,0x83,0x7f,0xdd,0xf6,0xa2,
0xd6,0xb9,0xb7,0xd9,0xfc,0x6b,0xfb,0xdb,0x2f,0xf4,0xfb,0xec,0xe8,
0x83,0x8a,0x3f,0xab,0x2f,0x29,0x6d,0xe9,0xfb,0x09,0xf0,0xd7,0xb6,
0xb4,0x7e,0x63,0xe9,0xb0,0x3b,0xba,0x17,0xbf,0xf4,0x9b,0x0d,0x6b,
0xbf,0xcd,0xe7,0x5f,0xbe,0x0f,0xfe,0xfc,0x63,0xbb,0x0e,0x2e,0x64,
0xcf,0x95,0xd7,0x5f,0x7e,0x5d,0x61,0x4d,0xe3,0xfd,0xc2,0x8a,0xc6,
0x8a,0xe2,0xaa,0xc6,0x9a,0x82,0xf7,0x86,0x81,0x6d,0xd9,0x1b,0xf5,
0x91,0xa5,0x83,0xa7,0x76,0x1b,0xda,0xee,0x37,0x1f,0xdc,0xfb,0x6e,
0xda,0x03,0x3f,0xff,0x4f,0x03,0x4f,0xcb,0x66,0x95,0xd7,0x34,0x56,
0x16,0x16,0xd7,0xe7,0x17,0x1f,0xab,0x4f,0x28,0xdd,0x99,0x8d,0x2e,
0x8f,0xab,0xcf,0x28,0xbd,0x50,0x7f,0xa7,0xb8,0x66,0x2b,0x78,0x0c,
0x00,0x7f,0x9a,0xf5,0xef,0x69,0x2c,0xce,0x1a,0xa5,0x6f,0x4d,0xef,
0x3c,0xa4,0xdd,0xef,0xbf,0xd0,0xaf,0xdd,0xef,0xdb,0xf5,0x6b,0x7d,
0x0d,0x70,0xb3,0xf9,0xd7,0xee,0xd5,0x9d,0x07,0x34,0x65,0x93,0xcb,
0xaf,0xd4,0x1f,0x28,0x8e,0x4c,0x7f,0x50,0x39,0xbe,0x76,0x54,0xe8,
0x56,0x39,0x74,0x44,0xd7,0xda,0x89,0xb5,0x52,0x3a,0xa6,0xfc,0x8c,
0x63,0x04,0x81,0x6d,0xce,0xba,0xd6,0xfd,0xeb,0xeb,0x59,0x5a,0x6a,
0xff,0xe8,0xc1,0x43,0x3e,0xff,0xde,0x3f,0xf5,0xff,0xec,0x6b,0xff,
0x3c,0xb0,0xdd,0xbf,0x7f,0xf1,0x03,0xeb,0xbf,0x76,0x2f,0xfe,0xe3,
0xc0,0xde,0xe9,0xa8,0xca,0x0d,0xe9,0x19,0x95,0x43,0x0a,0x3d,0xae,
0xed,0xdd,0xb7,0xcf,0xb3,0x27,0x9c,0xd2,0x67,0xd9,0x31,0x7d,0x0f,
0x7a,0x76,0x9f,0xa4,0xfb,0xa5,0x69,0xf6,0x48,0xf9,0xdd,0x2d,0xfe,
0x58,0x00,0xfe,0x14,0xeb,0xd7,0x7f,0x6f,0xd6,0x2f,0x2d,0xb5,0x1f,
0xf5,0xc5,0x62,0x9b,0x1f,0x75,0xac,0x1c,0x5e,0xef,0x9c,0xec,0x7e,
0xff,0x17,0x86,0xed,0xf6,0x9f,0xed,0xfa,0x6d,0x7a,0xfd,0x6f,0xf6,
0x3f,0x0d,0x3e,0x31,0x2d,0x57,0x7a,0x25,0x47,0x8d,0x38,0xef,0xb4,
0xd3,0x96,0xf4,0x3a,0xbe,0xc7,0xef,0x7b,0x1c,0xdf,0xe3,0xff,0xf4,
0xec,0xd3,0xf4,0xbb,0x9e,0xdf,0xef,0xb0,0xa8,0x53,0x1c,0x16,0x1e,
0xad,0x2f,0xf3,0xfe,0x30,0xf0,0x97,0x6b,0xfe,0x7b,0xc9,0xd7,0x7f,
0xf9,0xcf,0x5f,0x36,0xee,0x2b,0xf6,0x4b,0x7b,0x55,0xce,0xcf,0xae,
0x2f,0x4f,0xa8,0xdf,0x56,0x1e,0x96,0x1e,0x96,0xec,0xfe,0xc2,0x57,
0x07,0x6e,0x7c,0xff,0x77,0xe7,0x7b,0xf6,0x2c,0x9c,0x92,0x76,0x4f,
0xbe,0x73,0x41,0xff,0x87,0x7b,0x9e,0xf0,0x9d,0xdf,0x75,0x3f,0xbe,
0xc7,0x6f,0x7a,0xac,0xf7,0xdb,0x96,0x19,0xd8,0x71,0xf0,0xfe,0xb7,
0xa6,0xf5,0x05,0xa5,0x35,0x7f,0xb7,0xfb,0x0d,0xf0,0x97,0x59,0xd7,
0xbc,0x76,0xfd,0xcf,0xc6,0x5b,0x85,0xa7,0xea,0xd3,0x4b,0x73,0xeb,
0x4b,0x8a,0xab,0x9b,0xdf,0x2d,0xcc,0xc9,0x46,0x96,0x0e,0x19,0xdd,
0xa1,0xf8,0xe5,0xdf,0xb4,0xed,0xf7,0x85,0x7f,0xfb,0xe7,0x0b,0xff,
0xe9,0xb2,0xa3,0x2b,0x27,0x54,0x3b,0xc7,0x81,0xa7,0xf6,0x78,0x2f,
0x9f,0x7d,0xbf,0xdd,0x38,0xfb,0x5a,0x7f,0xf6,0xe9,0xf9,0xbb,0x5e,
0xdf,0xdf,0xfd,0xf9,0xa6,0x6c,0x7c,0x79,0xf9,0x56,0xf0,0x98,0x00,
0x3e,0x8c,0x96,0xb5,0xdf,0xda,0xe6,0x55,0x85,0x65,0x8d,0xa5,0x85,
0x25,0x8d,0x25,0xb9,0x77,0x0a,0xcb,0x9a,0x57,0x17,0xde,0x6b,0xcc,
0x2a,0x5e,0xf4,0xc3,0x6f,0x94,0x3b,0xfe,0xe7,0x17,0x2e,0xdc,0x65,
0xd6,0xce,0x83,0xbb,0xa5,0xe7,0x57,0x8e,0x28,0x9e,0x7c,0xed,0x29,
0xdf,0xed,0xfe,0x9f,0x1f,0x98,0x7d,0xeb,0x7f,0xfe,0xb6,0xe7,0xc9,
0x9d,0x57,0x75,0x88,0xd7,0x84,0xb7,0xfe,0xae,0x6b,0x57,0x80,0x3f,
0xd7,0xba,0xc2,0x3b,0x8d,0x17,0x8a,0xd3,0xeb,0x63,0x4a,0xd7,0x65,
0x8d,0x72,0x35,0x0b,0x95,0x90,0x35,0x2a,0xd7,0x66,0x77,0x95,0x1f,
0xad,0xcf,0x28,0xd5,0x47,0x7c,0xb3,0xb2,0xef,0xb3,0xff,0x78,0xc9,
0x17,0x46,0x74,0x4f,0xea,0x59,0xbd,0x72,0xf0,0x25,0x7d,0xc7,0x1c,
0x7b,0xfc,0xb1,0xbf,0xeb,0xf1,0x87,0xbd,0xef,0x26,0x3d,0x4f,0x38,
0xea,0x3f,0x76,0xaf,0x16,0x1b,0x2f,0x36,0xd6,0x6e,0x05,0x8f,0x0b,
0xe0,0x7f,0xf6,0x7e,0xe3,0xe9,0xe2,0x2d,0xd9,0xe0,0x72,0xaf,0xd8,
0x29,0xf9,0x56,0xd2,0xa9,0xb8,0x4f,0xb9,0x7d,0xae,0x63,0xe1,0x1b,
0xd5,0xfd,0x2b,0xbd,0xd2,0xfe,0x95,0xf3,0xeb,0x5d,0x2a,0x7b,0x0c,
0x3f,0x28,0x39,0x3f,0xbb,0xb5,0xfc,0x58,0xcb,0x7e,0xf8,0xa2,0x73,
0x26,0xe7,0x7b,0xdd,0xdf,0xf7,0xcc,0xf7,0xbb,0x3d,0xfb,0xac,0x5f,
0xf7,0xf5,0x38,0xfe,0xd8,0xd6,0x75,0x60,0x7e,0xfa,0x37,0x5f,0xa9,
0x5c,0x70,0xf9,0xb3,0x2d,0xdf,0x13,0xb3,0x15,0x3c,0x36,0x80,0xff,
0xde,0x7b,0x85,0x19,0x59,0xb1,0x7c,0x70,0xe8,0x5c,0x3e,0xb9,0xdf,
0x0f,0xfa,0x9e,0x77,0x66,0xdf,0x13,0x4e,0x3f,0xe3,0xf4,0x3e,0xa7,
0x9f,0x7e,0x6a,0x9f,0x93,0xfb,0xf6,0x3c,0xf9,0xc0,0x21,0x5f,0x1d,
0xd8,0x31,0xf6,0x4a,0x06,0x67,0x37,0x96,0x67,0xd6,0xdf,0x2a,0xbe,
0x56,0x4f,0x4b,0xdf,0xe8,0xdf,0xe3,0xbe,0x7d,0xcf,0x6b,0x3f,0xb3,
0xfd,0xb9,0x07,0x3c,0x71,0xcc,0x09,0xbd,0xfe,0xed,0x03,0xf3,0xef,
0xf8,0xee,0xbf,0xf9,0x72,0x3e,0xff,0x9e,0x69,0xf9,0xbe,0xd4,0x2d,
0xfe,0xd8,0x00,0xfe,0x07,0x8d,0x79,0xc5,0x62,0xba,0x5f,0x72,0xda,
0xf9,0x85,0xef,0x9d,0x72,0xca,0x51,0xbd,0xba,0x9e,0x7a,0x58,0xef,
0x2e,0xa7,0x76,0x69,0xd5,0xed,0x94,0xa3,0x7b,0xf5,0x3e,0xbd,0xa9,
0xf7,0x1e,0xa5,0xbd,0x87,0x96,0xea,0xf3,0x4b,0xab,0x9b,0x5b,0xbe,
0x1b,0xeb,0xa6,0x62,0x53,0x75,0xff,0xec,0x98,0xf4,0x8c,0xe4,0x94,
0xd8,0x2d,0x69,0x7f,0xd1,0xa1,0x93,0x7a,0x6f,0x7a,0x0d,0xf0,0xd8,
0xdf,0xf4,0xfc,0xee,0xb7,0xff,0x6d,0xb7,0xea,0x90,0xfa,0x0b,0xf6,
0xbf,0xc0,0xd6,0xae,0x31,0xbe,0xd8,0xad,0x78,0xcc,0xe0,0xc2,0x69,
0x87,0xf6,0x39,0xec,0xb4,0xae,0xbd,0xbb,0x9d,0xd6,0xad,0xe9,0x0f,
0xba,0x36,0x75,0x39,0xf5,0xdb,0x4d,0xc7,0xf4,0x6b,0x73,0xf6,0xe9,
0xd9,0xd3,0xe5,0x96,0xcb,0xbf,0xdf,0x58,0x58,0x18,0x97,0xdd,0x5a,
0x9a,0x50,0x9f,0x5b,0x7a,0xb2,0x3e,0xba,0x34,0x30,0x76,0xaa,0x7e,
0xfb,0xf4,0xa6,0xb7,0xd7,0xbf,0x17,0x9c,0xcf,0xbf,0xd3,0xda,0x2f,
0x39,0x20,0xbd,0x26,0x79,0xc3,0xfb,0x1f,0xc0,0xd6,0xae,0x71,0x6f,
0xf1,0xe0,0xc2,0x01,0x83,0x4f,0x38,0xa5,0x6b,0xaf,0x0f,0xce,0xbe,
0x6e,0x4d,0x5d,0x5b,0x7e,0x9e,0x7a,0x44,0xaf,0xae,0xfd,0x3e,0x77,
0xf6,0x29,0xd9,0x53,0xe5,0x96,0xf7,0x49,0xd6,0x36,0xbf,0x5f,0x58,
0xd6,0xfc,0x6e,0xf1,0xbd,0x96,0xe3,0x05,0x1b,0x4b,0x0b,0x0f,0x67,
0x03,0xcb,0x1d,0xfb,0x7d,0xf7,0xc1,0xd6,0xfd,0x6f,0x9f,0x9e,0xbf,
0xeb,0x76,0xc1,0x17,0x1f,0x39,0x23,0x7b,0xb0,0xbc,0x62,0x4b,0x3f,
0x2e,0x80,0xff,0x4d,0x63,0x66,0xf1,0xa2,0xb8,0x47,0xb2,0xf7,0x39,
0x47,0x9d,0x76,0xf4,0x29,0x47,0x1c,0x7b,0xf8,0xa9,0x87,0xf7,0x3a,
0xfc,0xb4,0xf5,0xbe,0x7d,0xea,0x91,0x3d,0x8f,0x3c,0xfd,0xd0,0xde,
0x6d,0x4b,0x7b,0x0e,0xbb,0x38,0x9b,0x50,0x7e,0xac,0x7e,0x5f,0xe9,
0xee,0xfa,0xdd,0xe5,0x7b,0xea,0xe3,0x4a,0x0f,0xd4,0xe7,0x94,0x5e,
0x6a,0xbc,0x53,0x7c,0x23,0x5f,0x03,0x1e,0x39,0xa8,0x69,0x54,0xd3,
0xf1,0xc7,0xfe,0xae,0xe7,0x89,0x5d,0x7f,0xf5,0xc5,0xca,0x51,0x97,
0x5f,0x57,0x7f,0xad,0xb4,0x6e,0x4b,0x3f,0x2e,0x80,0xff,0xd5,0xb2,
0xc2,0xc4,0xac,0x5f,0xb9,0x43,0xd2,0xae,0xb4,0xc7,0xf9,0x07,0x7c,
0xef,0xb0,0x33,0x0e,0xef,0x73,0xf8,0xe9,0x87,0xf7,0x3e,0xfc,0xf4,
0xae,0xbd,0x3b,0xf7,0xdd,0xef,0x94,0x2f,0x0f,0xd9,0xe5,0x92,0xaf,
0xc5,0x1e,0xc9,0x19,0xe9,0xc9,0x49,0xf7,0xf4,0x90,0xa4,0x63,0xba,
0x6f,0xe8,0x90,0x1e,0x10,0x8e,0x48,0xfb,0x24,0xfd,0xb3,0x6b,0xca,
0x53,0xeb,0x77,0x96,0x9a,0x86,0x35,0xdd,0x70,0xc2,0x89,0x47,0xfe,
0xeb,0xbe,0x17,0xef,0x36,0xbe,0x47,0x7a,0x65,0x65,0x7e,0x63,0x55,
0x71,0xcb,0x3f,0x2e,0x80,0xff,0xdd,0xdb,0xf5,0x47,0x8a,0x3f,0x4c,
0xcf,0xac,0x74,0xae,0x7d,0x35,0x7c,0xb9,0xf4,0xf9,0x61,0xbb,0x0c,
0xfd,0xdc,0x25,0xbb,0x14,0xda,0x0c,0xde,0x35,0x7c,0xb5,0x72,0x60,
0x3c,0x3c,0x74,0x89,0xfb,0x25,0x87,0x0d,0xbd,0x30,0xfe,0xf4,0xb4,
0xfb,0x1a,0x13,0xfb,0x4c,0x1c,0x3e,0xe9,0xb8,0xfb,0x87,0xdf,0x7e,
0x72,0xb9,0x71,0xec,0xb0,0x0e,0xb5,0x13,0xd2,0x8b,0x2a,0xdd,0x8a,
0xfb,0x5c,0xb5,0xe7,0xa0,0xaf,0xde,0x71,0x50,0x3c,0x2f,0xb9,0xa5,
0xfe,0x6c,0x69,0xe5,0x56,0xf0,0x98,0x00,0x3e,0x9c,0x55,0x85,0xd7,
0xeb,0x73,0x8b,0x63,0xb3,0x6b,0x4b,0x21,0x3d,0xa3,0x72,0x6c,0xda,
0x23,0x39,0x36,0x3d,0x33,0xa9,0x65,0x57,0x94,0x8b,0xe9,0x77,0x2a,
0x1d,0x07,0x5f,0x1f,0x97,0x1e,0xf6,0xfe,0xc8,0x95,0xed,0x57,0x5c,
0xb1,0x62,0xaf,0xf5,0x56,0xee,0xb3,0xf2,0xf2,0x95,0x07,0x4f,0x1b,
0x79,0x4c,0x3e,0x03,0xbf,0x9d,0x1e,0x11,0x7a,0xa7,0x83,0x2b,0x37,
0x67,0x33,0x4b,0xaf,0xff,0x05,0xc7,0xfd,0xcd,0xca,0xce,0x2a,0xef,
0x50,0xdb,0xa1,0xd6,0x35,0x1d,0x5d,0xd9,0xfc,0x74,0xdf,0xfa,0x3b,
0xe5,0x2d,0xff,0x1c,0x01,0x5b,0xbf,0x75,0xb9,0xb5,0x85,0xb5,0xcd,
0xeb,0x3f,0xd3,0xf6,0xa7,0xfc,0xdd,0xfb,0xcd,0xef,0x16,0x7e,0xde,
0x98,0x57,0x9c,0x5d,0x9f,0x53,0x9a,0x53,0x5f,0x50,0xfc,0x45,0xfd,
0x89,0x62,0xff,0xda,0xfe,0xc9,0xf4,0xee,0xef,0x8f,0x78,0x6f,0xf7,
0xe5,0x57,0x2e,0xdb,0x73,0xd9,0x95,0xef,0xed,0xb9,0xfc,0xca,0xe5,
0x7b,0x6e,0xf8,0xfd,0x6b,0x2b,0xae,0x78,0xbd,0xa9,0xeb,0xf0,0xc3,
0xd3,0xab,0x2b,0xb3,0xea,0x0b,0x8b,0x6f,0x34,0x56,0xe4,0xb7,0xbb,
0xee,0xcf,0xba,0xdf,0xef,0xd4,0xfb,0x96,0x3f,0x7e,0xff,0x3f,0x14,
0x5a,0xbe,0x67,0xe1,0xb3,0xf7,0xef,0x38,0xec,0xc9,0xfa,0xac,0xd2,
0xc6,0xd3,0x9f,0xba,0xa9,0xef,0x07,0xf6,0xd3,0x7d,0xe3,0x0e,0xc1,
0x4c,0x04,0xfe,0xd8,0xba,0xe6,0x35,0xad,0xef,0xd1,0xbe,0x9f,0xcf,
0xc0,0x35,0x1b,0xbe,0xd3,0xe5,0xcf,0xbe,0xbe,0xc6,0xec,0xe2,0x71,
0x43,0x4f,0xad,0xae,0xee,0xb0,0xfc,0xf2,0xe5,0xad,0x73,0x6f,0xd9,
0x95,0xcb,0x37,0xcc,0xbf,0x56,0x7b,0x2c,0xbf,0x72,0x45,0xb7,0xfe,
0x97,0x1e,0x94,0xde,0x5b,0x59,0x95,0xdf,0xe6,0xca,0xe6,0x95,0xc5,
0xf7,0xf3,0xdb,0xff,0x93,0x6f,0xb3,0xf1,0x64,0xf1,0xac,0x9b,0x3e,
0x55,0xdc,0xf4,0x3d,0x83,0x6f,0xfe,0xc3,0x80,0xb3,0xf2,0x99,0xfa,
0xc9,0x45,0x6d,0x2f,0x69,0x3d,0xbd,0x70,0xa7,0x4b,0xea,0xf5,0x5f,
0x95,0x5a,0x2e,0xdb,0x32,0x27,0x5b,0xce,0xff,0xd4,0x4d,0xd1,0x6b,
0x8c,0xb0,0x9d,0x5b,0xd7,0x3a,0xc3,0x3e,0x9c,0xd5,0x8d,0xa5,0x85,
0x57,0x1b,0x8b,0x0a,0x0b,0x1b,0x4f,0x17,0xe7,0x35,0x9e,0x2f,0xbe,
0xd4,0x78,0xa5,0xf0,0x7a,0xe3,0x97,0x85,0x15,0xad,0x33,0xe9,0xc3,
0x5f,0xcf,0x26,0x8d,0xa7,0x0b,0x3f,0x08,0x1d,0xc3,0xe4,0x6f,0xae,
0xb8,0x6c,0xc5,0x9e,0xef,0xe5,0x6b,0xbf,0xcd,0xe7,0xdf,0x7b,0x57,
0xae,0xc8,0xd7,0x7f,0xcf,0x37,0xed,0x3f,0xfc,0xa8,0xec,0x8e,0xca,
0x73,0xf9,0x0c,0x9b,0x95,0xaf,0xd9,0xe6,0xe4,0xb7,0xfb,0x8b,0xc6,
0x7b,0x7f,0xd2,0xed,0xbc,0x98,0xef,0x73,0xff,0xe1,0xcd,0xb6,0x03,
0x36,0xcd,0xbf,0x7f,0x6d,0x73,0xe1,0x67,0xb2,0x75,0xe5,0xae,0x63,
0x3f,0x3b,0xac,0xf5,0xf4,0xda,0x5d,0x2e,0xda,0x35,0x3f,0xdd,0x72,
0xd9,0xc1,0x1b,0xe6,0xe4,0x4e,0xd7,0x8d,0x2a,0xfd,0x59,0x8f,0x09,
0xd8,0x76,0x34,0x3e,0xac,0x25,0x85,0x87,0xb2,0x6b,0x4a,0x85,0x74,
0x50,0xe5,0xa2,0xf4,0x9c,0xca,0xf9,0xe9,0x80,0xca,0xe0,0x74,0x70,
0xa5,0x91,0x5d,0x5f,0x1e,0x5d,0x7f,0xb2,0xf8,0xde,0x87,0xbe,0x9e,
0xcd,0xbd,0x5e,0xb8,0x21,0xed,0x53,0xd9,0xfb,0xec,0x4b,0xb3,0x17,
0xf7,0x59,0x71,0x79,0xeb,0x6b,0x7f,0x5f,0x5b,0xd1,0x3a,0xf7,0x5a,
0x7e,0x7f,0xe3,0xc0,0xdb,0x2e,0xfb,0xe6,0xb0,0xbd,0x6a,0x27,0xe7,
0xb7,0x35,0x30,0x3d,0xad,0xd2,0x14,0x9b,0x92,0x33,0xd2,0xfe,0x95,
0x5a,0x36,0xb6,0xfc,0x4a,0xeb,0xff,0x87,0xf4,0xe1,0x6e,0xa7,0xef,
0xa8,0x4f,0x17,0x37,0xae,0xfb,0x76,0x5a,0xb8,0x7e,0xcd,0xb7,0x63,
0xf3,0x92,0xf2,0x55,0x37,0x7c,0x72,0xd3,0x9a,0xf0,0x13,0x57,0x4f,
0x28,0xad,0x6b,0x3c,0x5f,0xf8,0xd8,0x8c,0x36,0x43,0x5a,0xe6,0x63,
0xcb,0xbf,0xff,0xe9,0x8f,0x07,0xd8,0x1e,0xfd,0xa2,0x7e,0x7d,0xa9,
0xa9,0x76,0x64,0x72,0x62,0xed,0xfc,0x30,0x20,0x0e,0x0a,0x83,0xe2,
0x80,0x70,0x4e,0xed,0xa4,0x70,0x6c,0x3c,0x32,0x74,0x49,0x2f,0x4e,
0xde,0xf8,0xb3,0xae,0x77,0x6d,0xe1,0x95,0xfa,0xe8,0xe2,0xf7,0xe3,
0xbe,0xc9,0x7e,0xfd,0x4e,0x4d,0x1b,0xc7,0x8c,0x19,0x31,0xed,0xe0,
0x69,0x23,0x1f,0x3c,0x74,0xdc,0xc8,0x1f,0xf5,0x39,0xa7,0xf9,0x5b,
0xc3,0x76,0xab,0x1d,0x16,0x8f,0x49,0x0e,0x88,0xdd,0xc3,0x45,0xb1,
0x5a,0xad,0xd5,0x92,0xea,0xa0,0x78,0x66,0x38,0xac,0xd6,0x25,0xa4,
0xd9,0x82,0x0f,0x37,0x9f,0xb2,0xc1,0xa5,0x8d,0x33,0xef,0x73,0x13,
0x3a,0x0c,0xfb,0xc4,0xfc,0xb6,0x83,0x5a,0x7e,0xdf,0x21,0x5d,0x57,
0x59,0xd2,0xbc,0x63,0x79,0xe3,0xfc,0xfb,0x87,0x3b,0xce,0x6a,0xbd,
0xec,0xa7,0x5e,0x69,0x3b,0xb0,0xed,0xe2,0x4f,0x0f,0x18,0x98,0xad,
0x2b,0x6d,0xe9,0xe7,0x1c,0xd8,0x1a,0x2c,0x2f,0xdc,0x9c,0x1d,0x5c,
0x19,0x5a,0x9b,0x1c,0x66,0xc5,0x39,0x61,0x6e,0x3a,0x2f,0xcc,0x8f,
0x4f,0x87,0xd9,0x71,0x56,0x98,0x1a,0xc7,0x55,0x4f,0xc9,0xe7,0xd1,
0x73,0x8d,0xb7,0x0b,0x6f,0x36,0xde,0x2c,0xb6,0x58,0x96,0xaf,0x15,
0x17,0xd4,0xe7,0x14,0xe7,0xd4,0xe7,0xe7,0xa7,0x37,0x5e,0xc7,0x3b,
0x85,0xe7,0xeb,0x33,0x8b,0x13,0xeb,0x63,0x4b,0x63,0xeb,0x13,0x4a,
0x8f,0xd5,0x9f,0x2d,0xbe,0xdd,0x7a,0xfe,0xbb,0x85,0xc7,0xb3,0x9f,
0x94,0xce,0x8b,0x47,0x54,0xf6,0xaf,0x7d,0x39,0xb4,0x49,0xda,0x54,
0xdb,0x84,0x76,0xd5,0xf6,0xb1,0x6b,0x72,0x4a,0x5a,0xac,0x9c,0x1b,
0xf7,0x4b,0xae,0xaa,0xcd,0xab,0xbe,0x12,0x17,0x55,0x9f,0x89,0x0b,
0xc2,0xd3,0x71,0x56,0x75,0x6c,0xed,0xec,0xd0,0x3e,0x6d,0xae,0xfc,
0xa2,0xb1,0xa4,0xb8,0xfe,0x36,0xdf,0x28,0x2e,0x69,0xac,0x2a,0xac,
0x6a,0xbc,0xb5,0xe9,0x3e,0xbc,0xd9,0x78,0xab,0x75,0x4d,0xfa,0x44,
0x3e,0xe3,0xda,0xfc,0xeb,0xfa,0x3d,0xef,0xc7,0x2e,0xbd,0xa6,0xd2,
0x3a,0xff,0x5a,0xf6,0xbf,0x69,0xbe,0xdf,0xcd,0x3a,0x94,0x3f,0xb7,
0xaa,0x6d,0xff,0x96,0xf9,0xd7,0x66,0xda,0x67,0x86,0xae,0x4b,0x3f,
0xb3,0xfe,0xb2,0x4f,0x7c,0x6c,0xf0,0xf3,0x5b,0xfc,0x39,0x07,0xb6,
0x0a,0xf5,0xd9,0x85,0xee,0xb5,0x21,0xe1,0xd5,0xf4,0xa9,0x30,0x33,
0x7b,0x24,0x3c,0x9c,0x3e,0x12,0x1e,0x49,0xa7,0x27,0x8f,0xa6,0x33,
0xc2,0x13,0xf1,0xd9,0x70,0x66,0xbe,0x2e,0x4c,0xd3,0x21,0x95,0x21,
0xb9,0x41,0xe9,0xb0,0xca,0xcd,0xd9,0x88,0xf2,0xa9,0xf1,0xe4,0xe4,
0xc4,0xdc,0xf0,0x6c,0x41,0xbe,0x8e,0x5a,0x5d,0x78,0x32,0xbb,0xa2,
0xd4,0x37,0x9e,0x98,0x9c,0x10,0x7b,0x26,0x3d,0xe3,0x71,0xc9,0xf1,
0xf1,0x8c,0x4a,0x73,0x36,0xbd,0xb4,0x2c,0xbf,0xfe,0xb7,0xeb,0xe3,
0x8b,0x97,0xc4,0x63,0x2b,0xdd,0x62,0xe7,0xa4,0x53,0x6d,0xff,0xd0,
0x31,0xee,0x17,0xba,0xc4,0x13,0x92,0x8b,0xd2,0x46,0xf9,0xb0,0xda,
0x4f,0xc3,0x9a,0xb8,0x38,0xcc,0xcb,0x6f,0x6b,0x46,0xfa,0x50,0x98,
0x9a,0x3e,0x54,0x7d,0x3c,0x9d,0x56,0x6d,0xaa,0x75,0x4d,0xb2,0x74,
0x50,0x79,0x48,0xeb,0xed,0x0e,0xac,0xb4,0xac,0x07,0x1f,0xcd,0x8a,
0xe5,0xc1,0x9b,0xee,0x47,0xa5,0x32,0xab,0xbe,0xae,0x78,0xd6,0x1d,
0xeb,0xdf,0xe3,0x6d,0xfb,0xca,0xa7,0x06,0x0e,0x4e,0xaf,0x6a,0x7d,
0x6f,0xa3,0xed,0xd2,0x9d,0x2f,0x6e,0x6a,0x59,0xdf,0xd5,0xe3,0xfa,
0xf5,0xde,0x86,0xf7,0x40,0x36,0xee,0x87,0x5b,0xd7,0x82,0x5b,0xfa,
0x39,0x07,0xfe,0xf6,0x3e,0xc4,0x6b,0x84,0xab,0xeb,0x57,0x15,0x0f,
0x8c,0xaf,0x55,0x67,0x64,0xb7,0x86,0x51,0xd9,0xe8,0x64,0x4c,0x76,
0x77,0xb8,0x3b,0xbd,0x3b,0x8c,0x49,0x6f,0x0b,0xa3,0xd3,0x3b,0xc3,
0x41,0xb5,0xe3,0x92,0x5e,0xb5,0xfe,0xe1,0xbc,0x7c,0x6f,0x7c,0x41,
0xed,0xa0,0xea,0xa1,0xf1,0xa4,0x50,0x8e,0x97,0x56,0x1b,0xf9,0x5e,
0xb5,0x43,0x5a,0x4d,0xde,0xa8,0x3f,0x51,0xfc,0x41,0xfc,0x4e,0x32,
0x30,0x0e,0xaf,0x5e,0x13,0xaf,0x0b,0xd7,0xd4,0xae,0xa8,0x26,0xf1,
0xcc,0x6a,0xe7,0x5a,0x9f,0x70,0x7f,0x7d,0x49,0xf1,0xc6,0xb4,0x7b,
0xe5,0xc4,0x5a,0xa1,0xda,0xc8,0xcf,0xbf,0x2a,0xfe,0x30,0x0c,0xaf,
0x85,0xea,0x90,0xfc,0xba,0x8e,0x8a,0x87,0x85,0x33,0x6a,0xff,0x51,
0x7d,0x26,0xbb,0x3f,0xdc,0x95,0x8e,0x0b,0x63,0xd3,0x7b,0xc2,0x8d,
0xe9,0x0d,0xd5,0x51,0xf9,0xfc,0xbb,0x2e,0xee,0x19,0x0e,0xc9,0x67,
0xf2,0xb9,0xb5,0x73,0xc2,0x79,0xf1,0xd4,0xb0,0x4f,0xfa,0xb3,0x64,
0x50,0xbe,0x57,0xee,0x5f,0xfb,0x41,0x38,0x27,0x5e,0x10,0x4e,0x8b,
0xbb,0x87,0xeb,0xeb,0x4f,0x94,0x3e,0xf6,0x44,0xdb,0xc1,0xad,0xf3,
0x2d,0x5f,0xd3,0x3d,0x57,0x1f,0x50,0xfa,0xf4,0xe2,0xb6,0x03,0xda,
0xce,0xff,0xc4,0xa0,0x09,0x8d,0x75,0xc5,0x75,0x8d,0x99,0xc5,0x8f,
0xcf,0xdd,0xf0,0xef,0xf9,0x9e,0xb7,0xc3,0x84,0xcf,0xb5,0xbe,0x1f,
0xf2,0xb1,0x91,0x4f,0x94,0xb7,0xf8,0xeb,0xb2,0xc0,0x56,0x61,0x49,
0x76,0x66,0xb9,0x16,0x5f,0xad,0x5e,0x97,0x8d,0x49,0xc6,0x65,0x13,
0xc3,0x83,0xd9,0x94,0x30,0x29,0x9d,0x18,0xc6,0xa5,0x63,0xc3,0xf8,
0xf4,0x27,0x61,0x9f,0xd8,0x2b,0xfc,0x30,0xbe,0x59,0x9d,0x9f,0xaf,
0x05,0x9f,0x8b,0x47,0x87,0xee,0xb5,0xa7,0xaa,0x6f,0xc5,0x5f,0x84,
0xc5,0xd9,0x82,0x7c,0x0e,0x1d,0x14,0x26,0x65,0xa5,0x72,0xb7,0xda,
0xc4,0x7c,0x0f,0xfb,0x52,0x78,0x29,0xbe,0x1c,0x5e,0x4a,0x9f,0x0d,
0x4f,0xc5,0x47,0xab,0x23,0x6a,0x5f,0xaf,0x7e,0x2f,0xbb,0xb7,0x72,
0x74,0xed,0x82,0x30,0x37,0xbf,0xfc,0x1b,0xe9,0x92,0xf0,0x6e,0xf6,
0x6e,0x58,0x9a,0xbe,0x15,0x16,0xa7,0x6f,0x86,0x4b,0x62,0xbb,0xea,
0x63,0xf1,0xd5,0x7c,0xc6,0x8e,0x0b,0x93,0xe2,0xcd,0xe1,0xa2,0x98,
0xe4,0x73,0x77,0x54,0xf5,0x96,0xf4,0x96,0x70,0x6f,0xfa,0xcd,0xea,
0x5e,0xf1,0xc5,0xea,0xa2,0x74,0x4e,0x98,0x9f,0x3e,0x1a,0xda,0xc7,
0x0b,0x92,0xa3,0xe2,0xd4,0xf0,0x5c,0x7e,0x7a,0x5e,0xfa,0x5c,0x18,
0x14,0xbf,0x10,0x7e,0x96,0x9d,0x55,0xd9,0xf8,0xbe,0xef,0x67,0xc7,
0x76,0x19,0xb6,0x2e,0xeb,0x52,0xfe,0xec,0xb2,0xb6,0xfd,0x77,0xbe,
0xab,0x69,0xd8,0xc6,0xc7,0xb6,0xeb,0xe4,0x5d,0x86,0xb6,0xce,0xbf,
0x55,0x9f,0xeb,0xdf,0xba,0x37,0x6e,0x39,0x36,0xa6,0xbe,0xce,0x7b,
0xbf,0x40,0xab,0x67,0xb2,0xae,0xe5,0x99,0xe9,0xd4,0x70,0x6f,0x36,
0x31,0x99,0x94,0x4d,0x4a,0xae,0x4e,0xcb,0xa1,0x10,0x87,0x56,0x87,
0xc4,0x6a,0xf5,0x47,0x71,0x58,0xd8,0x2f,0x7e,0x3b,0x79,0x3a,0xbe,
0x16,0x66,0xa7,0x73,0xc3,0x9c,0xb4,0x6f,0x78,0xbe,0xb6,0xaa,0x3a,
0x3b,0x9b,0x9e,0x4c,0xcf,0x16,0xe6,0xf3,0xea,0x2b,0xa1,0x9a,0x76,
0x4d,0xa6,0xe5,0xe7,0xcd,0xc8,0x67,0xe6,0xfd,0xe9,0xbd,0xf9,0x5a,
0xee,0xde,0xea,0xdd,0xe9,0xa4,0xf0,0x64,0x2c,0xe4,0x7f,0x7b,0x5e,
0xd2,0xbb,0xb6,0xbc,0xfa,0x46,0xf6,0x54,0x78,0xbc,0x3e,0x27,0x59,
0x50,0x7f,0x26,0x59,0xd8,0x78,0x21,0x79,0xa5,0xfe,0x5e,0x38,0x39,
0xee,0x57,0x7d,0x27,0x1d,0x9f,0xff,0xcd,0xfd,0x61,0x7c,0x6c,0x0a,
0xbb,0xd5,0x3a,0x84,0x9b,0xd2,0xfb,0xf2,0x79,0x38,0x3a,0xdc,0x93,
0xf6,0xa8,0x76,0x8c,0x77,0x87,0x9f,0x67,0x8f,0x85,0x59,0xd9,0x9c,
0xa4,0x47,0x3c,0x38,0x29,0xc4,0x95,0xd5,0x47,0xf3,0xd3,0xf3,0xb2,
0x51,0x61,0xaf,0x78,0x52,0xf2,0x60,0xf3,0x8e,0x95,0xd6,0xd7,0xf3,
0x5a,0x8f,0x71,0x8e,0xc5,0x75,0xd9,0x0e,0x95,0xd6,0xbd,0x6f,0x3a,
0x79,0xd3,0xfa,0x6e,0xc0,0xa8,0x4f,0x17,0x36,0xbe,0x07,0xd2,0xfa,
0x5a,0x60,0xbe,0x4e,0x7c,0xa2,0x65,0x6d,0xb8,0x15,0x3c,0xef,0xc0,
0x96,0xf7,0x48,0x7a,0x60,0xe5,0xb5,0x7c,0x76,0x4d,0xcc,0x26,0x85,
0x87,0xb3,0xbb,0xc2,0x7e,0xb5,0x2f,0x86,0xdd,0x6b,0xbb,0x87,0x3d,
0x6a,0xed,0xf3,0x3d,0xe8,0x01,0xa1,0x4b,0xec,0x96,0xbc,0x19,0xa7,
0xe4,0xeb,0xc1,0xfb,0xf2,0x3d,0xea,0xd4,0xf0,0x4e,0x36,0x2e,0xb9,
0x3f,0x9b,0x90,0x8c,0xcf,0xa6,0x26,0xe3,0xd2,0x7d,0x42,0x9f,0xda,
0xc0,0xf0,0xaf,0xe9,0x5d,0xe1,0x8e,0x7c,0xcf,0x7c,0x73,0x1c,0x1a,
0xce,0x8f,0x57,0x56,0x47,0xa7,0x37,0xe7,0x73,0x70,0x74,0xe8,0x10,
0xbb,0x84,0x29,0xf1,0xf5,0x30,0xbe,0x3e,0x25,0x99,0x56,0x7f,0x24,
0x4c,0xcb,0x26,0xe4,0x7b,0xe2,0xa9,0x61,0x46,0xf6,0x48,0xd8,0xb3,
0x76,0x5c,0xbe,0x8e,0xbc,0x37,0x5f,0x63,0x4e,0x08,0x3f,0xca,0xd7,
0x73,0x83,0xd2,0x13,0x2a,0x97,0xc7,0xc7,0xc3,0x6d,0xd9,0x98,0x7c,
0xfd,0xd7,0x2b,0x74,0x8d,0x67,0x84,0xa7,0xb2,0x3b,0x93,0x3b,0xeb,
0x93,0x93,0x73,0xe3,0xd7,0xab,0x2f,0xc5,0x19,0xc9,0xed,0xd9,0xb8,
0x7c,0x3e,0x7e,0x23,0x74,0x4a,0xc7,0x54,0xae,0xb8,0xe1,0x93,0xa5,
0x8d,0xb3,0xed,0xe3,0x57,0xce,0x2c,0xaf,0xab,0xf7,0x2d,0xed,0x50,
0x6b,0x0a,0x1d,0x6a,0x9f,0x09,0x83,0x36,0xac,0xf1,0x46,0x5d,0xb7,
0xd3,0xa6,0xcb,0x6c,0x7a,0xed,0x6f,0x2b,0x78,0xce,0x81,0xad,0xc3,
0xe4,0xb4,0x4b,0xe5,0xad,0x7c,0xdd,0x37,0x39,0xdf,0xf7,0x3e,0x96,
0xde,0x16,0xda,0xd7,0xbe,0x95,0xcf,0xbc,0x2e,0xe1,0x90,0xb8,0x7f,
0xfe,0xb3,0x47,0x72,0x76,0x3c,0x3e,0x79,0x2f,0x4e,0xca,0xe7,0xe3,
0xe4,0x30,0x35,0x5f,0xc7,0x3d,0x90,0x4d,0x4e,0x1e,0xc8,0xa6,0x24,
0x13,0xb3,0x07,0x93,0xd1,0x71,0xaf,0xd0,0x39,0xdf,0x17,0x3f,0x96,
0xde,0x51,0x1d,0x9f,0xde,0x13,0x4e,0x88,0x5f,0xad,0xee,0x5b,0x3b,
0x26,0x4c,0x4e,0xef,0xc8,0xe7,0x5f,0xcb,0x2c,0x3d,0x38,0xfc,0x32,
0x3e,0x94,0xcf,0xbd,0x87,0xc3,0x13,0xd9,0x4d,0xc9,0x59,0xf1,0xb8,
0xd0,0x14,0xcf,0x0c,0x85,0x74,0x68,0x68,0x53,0xbb,0x30,0xdf,0x2b,
0xdf,0x9b,0xaf,0xf5,0x26,0x86,0x62,0xdc,0x37,0x8c,0xce,0x4e,0xad,
0x8c,0x8b,0x33,0xaa,0xa3,0xf3,0x19,0x3c,0x36,0xed,0x91,0x5f,0xd7,
0x91,0xc9,0x93,0xe9,0x7d,0xc9,0xbd,0xf9,0x5c,0xbe,0x3c,0xad,0x84,
0xb7,0xd3,0xd1,0xf9,0xef,0x53,0xf2,0xfb,0xf3,0xf9,0x50,0xad,0xbf,
0x5e,0x6a,0xba,0x6b,0xe7,0x61,0x9b,0x1f,0xef,0xbc,0xae,0x31,0xb9,
0xd8,0x74,0xcd,0x4e,0xe5,0xcf,0x2d,0x6f,0xd3,0xff,0x33,0x1b,0x8e,
0x77,0x5e,0x97,0x6d,0x78,0xcf,0x77,0xc3,0xfc,0xf3,0xda,0x1f,0xb0,
0xb9,0x29,0xf9,0xfc,0x7b,0x3b,0x5f,0xd7,0x4d,0xcd,0xa6,0x86,0x29,
0xe9,0x03,0x61,0x62,0x9c,0x1c,0x26,0xd5,0x26,0x86,0x31,0xf1,0x82,
0xea,0x7e,0x69,0x73,0x52,0x49,0x07,0x25,0xef,0xe6,0x7b,0xd4,0x29,
0xf9,0x7a,0x6f,0x46,0x36,0x2b,0x3c,0x99,0x4d,0xcb,0x7f,0x9f,0x1c,
0x26,0xe7,0x6b,0xb8,0x6b,0xe3,0xae,0xf9,0x3e,0xf6,0xad,0x30,0x26,
0x1d,0x1b,0x26,0xa6,0x3f,0x0b,0x9f,0xcf,0xd7,0x8b,0xc7,0xc4,0x43,
0x92,0x39,0xf1,0xce,0x7c,0xbd,0x38,0x3a,0xec,0x11,0x8f,0xaf,0xae,
0xce,0x2f,0xfb,0x70,0xf6,0x58,0xb2,0x30,0x3b,0x33,0x9f,0x79,0x9f,
0x0f,0x6d,0x6b,0x6d,0xf2,0xf5,0x65,0xfb,0xb0,0x7f,0xed,0x92,0xb0,
0x30,0xde,0x91,0xff,0xed,0x3d,0xe1,0xf2,0xb8,0x67,0x72,0x72,0xec,
0x95,0x2c,0x89,0xf7,0x54,0xef,0xce,0xee,0xc9,0xe7,0xdf,0xe1,0xe1,
0xc2,0xf4,0x3b,0x95,0x7c,0xf6,0x25,0x63,0xb3,0x7b,0xc3,0x7d,0xd9,
0x82,0x7c,0xfe,0xde,0x91,0xdf,0xc7,0xab,0x92,0xcf,0xc7,0xde,0xc9,
0xd3,0x8d,0xb5,0xc5,0xcf,0x4c,0x6b,0xb3,0xfe,0xb5,0xbd,0x65,0x9f,
0xed,0xdf,0x25,0x9f,0x77,0x4b,0xb3,0xa6,0xd2,0xce,0x4b,0xdb,0x5e,
0xdc,0x7a,0xfc,0x5f,0xb6,0xae,0xd2,0xfa,0xf8,0x36,0x3b,0xcf,0x6b,
0x7f,0xc0,0x1f,0x9b,0x9a,0xee,0x5b,0x79,0x25,0x9d,0x1b,0x1e,0x6a,
0x99,0x6b,0xe9,0xa4,0x30,0x3b,0x9d,0x17,0xe6,0xc4,0x27,0xc3,0xdc,
0x74,0x76,0x38,0x2e,0x9e,0x12,0xbe,0x1f,0x6f,0x0b,0x2f,0x67,0xf7,
0xe7,0xb3,0x67,0x7a,0x32,0x39,0xed,0x9f,0x54,0xd3,0x59,0xf9,0x7a,
0x6e,0x4a,0x3e,0xff,0x66,0x25,0x85,0xf8,0xd5,0x50,0x8f,0x8b,0xc2,
0xed,0xf9,0xfc,0x1b,0x97,0xde,0x1e,0x2a,0xb5,0xe1,0xa1,0x11,0x6f,
0x0a,0x4f,0xe7,0xb3,0xef,0xbe,0xf4,0xfa,0xea,0x97,0x63,0xbf,0xb0,
0x32,0x9f,0x61,0xd3,0xb3,0x47,0x93,0xd9,0xf9,0xfa,0x2f,0xc4,0xcb,
0xaa,0x3f,0x8e,0x31,0x1c,0x58,0x3b,0x3c,0x5c,0x94,0x9e,0x18,0x16,
0xa6,0xb7,0xe4,0x7f,0x3b,0x2a,0x8c,0x8e,0xe5,0x70,0x49,0x6d,0x6e,
0x75,0x6e,0x7e,0x1d,0xe3,0xb3,0xb1,0xf9,0xda,0xb1,0x63,0xa8,0xa5,
0xe7,0x56,0x8a,0xd9,0x23,0xc9,0x3d,0xd9,0xd8,0x7c,0xaf,0x3d,0x29,
0xdc,0x91,0x8d,0xcf,0xaf,0xb3,0x73,0x68,0x9f,0xde,0x52,0x59,0xdd,
0x78,0xae,0xb0,0xe9,0xbd,0xdf,0x0d,0x73,0x2d,0x6e,0xfc,0x0c,0xf0,
0x66,0x9f,0x77,0x5b,0xd7,0x18,0x55,0xdc,0x78,0x7c,0x74,0xcb,0x31,
0x32,0xd1,0xfc,0x03,0x36,0xf3,0x7c,0xd6,0xb5,0x5c,0x89,0xb3,0xf3,
0xb9,0x37,0x3b,0x3c,0x99,0xce,0x0c,0xd3,0xf2,0x7d,0xeb,0x9d,0xe9,
0x98,0xdc,0xc3,0x21,0xc4,0x6f,0x86,0xa3,0xe3,0xd3,0x61,0x4e,0x3e,
0x7f,0x1e,0xa8,0xcf,0x48,0x7e,0x90,0xee,0x1d,0x0e,0x8a,0x0f,0x87,
0xc7,0xf3,0x7d,0xe8,0x94,0x6c,0x66,0x38,0xbe,0xb6,0x4f,0xb8,0x2b,
0x3e,0x9e,0x5f,0xb6,0xe5,0x7d,0x8f,0x49,0xd5,0xf9,0xe9,0x8b,0x61,
0x51,0xfa,0x72,0x78,0x24,0x9d,0x12,0x1e,0x4f,0x6b,0x61,0x8f,0xda,
0x19,0x61,0x5d,0xbe,0xf6,0x9b,0x51,0x9f,0x95,0xcc,0xca,0x9e,0x4e,
0x5e,0x49,0x5f,0x0b,0x8b,0xd3,0x57,0xc2,0xf5,0xe9,0x01,0x21,0xa6,
0x07,0x27,0xe3,0xf2,0x79,0x3b,0x26,0x9f,0x95,0x77,0xa6,0x33,0xc2,
0x2b,0xf9,0xed,0xdc,0x95,0xaf,0xfd,0xc6,0x67,0xf7,0x25,0x37,0xc6,
0xdd,0xc3,0xcf,0xb2,0x1f,0x96,0x8f,0xcb,0x67,0xf1,0xe8,0xfa,0xd8,
0x70,0x4f,0x76,0x77,0xee,0xe1,0x50,0x8a,0x5f,0x09,0xa1,0xbe,0xb8,
0xb4,0xae,0x31,0xa1,0xb8,0xf1,0xb3,0x1e,0x1b,0xe7,0xda,0xc6,0xe3,
0x5b,0x36,0x1d,0xff,0xd7,0xf2,0xf8,0x1a,0x4b,0x0a,0x3b,0xce,0x68,
0x3b,0x64,0xe3,0x7b,0xc0,0x1d,0x36,0xce,0x45,0x80,0xc6,0xd2,0xc2,
0xe3,0xd9,0x80,0xf2,0xfe,0xf1,0xb4,0x30,0x2c,0xc6,0x6a,0x2d,0x2d,
0x56,0xaf,0xc9,0xe7,0xdf,0xad,0xf9,0xba,0xec,0xe6,0x74,0x5c,0x18,
0x1e,0xdb,0xe7,0xfb,0xd9,0xb7,0xf3,0xb5,0xe1,0x94,0xf0,0x68,0x36,
0x31,0xd9,0x27,0x9e,0x95,0x1c,0x16,0x67,0xe5,0xf3,0x70,0x4a,0x78,
0x20,0x9d,0x16,0xbe,0x59,0x3b,0x28,0xcc,0x88,0x53,0x5a,0x8f,0x17,
0xbc,0x3b,0xbd,0xa5,0x7a,0x53,0x1c,0x15,0x6e,0x4b,0x6f,0x0e,0xd7,
0xa4,0xd7,0x87,0x5b,0x63,0xef,0x96,0xd7,0x11,0x93,0x87,0xb3,0xf9,
0xc9,0x82,0xfa,0x82,0x64,0x7e,0xfd,0xe9,0x64,0x5e,0x3e,0xcf,0xe6,
0x66,0xf3,0xc2,0x63,0x71,0xff,0x7c,0xfe,0x9d,0x55,0x39,0xb6,0x76,
0x4d,0xb8,0x23,0xdf,0xff,0xde,0x9b,0xcf,0xcf,0xe1,0xe9,0x6d,0xd5,
0xf1,0xe9,0xf8,0x30,0x2e,0x7b,0x20,0xc9,0xe2,0x5e,0xe1,0xce,0x6c,
0x60,0xb9,0x5f,0x7c,0x2e,0xdc,0x9e,0x8d,0xcb,0xd7,0x80,0xf7,0xe6,
0xe7,0xcf,0x0c,0x17,0xc5,0x4e,0x61,0x6a,0xeb,0xb1,0x7d,0x7f,0xb4,
0xae,0xcb,0x66,0x96,0x37,0x1d,0xeb,0xb7,0xf9,0x3a,0xaf,0x3e,0xe8,
0x0f,0xc7,0x40,0xb7,0xbe,0xfe,0xf7,0x9c,0xf9,0x07,0x1f,0x11,0x6b,
0x5b,0xbf,0xcb,0xef,0xbf,0xb7,0xba,0xf1,0x48,0xf1,0xdc,0xf4,0xbb,
0x95,0x43,0xe3,0x9e,0x61,0xcf,0xda,0xde,0x61,0xef,0xb8,0x47,0x38,
0x37,0xce,0xae,0xde,0x96,0xef,0x79,0x6f,0x4f,0x27,0x84,0x18,0xbf,
0x16,0xce,0x8a,0x2b,0xc3,0xc4,0x6c,0x5a,0x32,0x27,0xfb,0x49,0xd8,
0x33,0x5e,0x56,0x39,0x22,0x2e,0x0e,0x33,0xb3,0xc9,0xe1,0xc1,0x7c,
0x8d,0xb8,0x47,0xed,0xe8,0x64,0x7e,0x1c,0x57,0x6d,0x3d,0xe6,0x25,
0x1e,0x19,0x3a,0xd7,0x0e,0x0b,0x87,0xc4,0x83,0xf2,0x35,0x62,0xa7,
0x70,0x68,0xdc,0x27,0xdf,0x3b,0x1f,0x53,0xe9,0x9a,0x5e,0x1c,0x4a,
0xe9,0xb0,0x6a,0xbf,0x7c,0x8f,0x3c,0x3b,0x7b,0xa0,0x75,0x8f,0x3d,
0x25,0x3d,0xa0,0x7a,0x61,0xbe,0xbf,0x6d,0x5f,0x3b,0x20,0xf4,0xce,
0xf7,0xd8,0x27,0xc5,0x6f,0x85,0x0e,0xb5,0x47,0xab,0x93,0xf2,0x3d,
0xee,0xf8,0x7c,0xcf,0x7b,0x52,0x3c,0x26,0x5c,0x99,0x76,0xa9,0xcc,
0x8e,0x8f,0xe4,0x6b,0xc2,0x89,0x61,0x4a,0x3e,0xff,0xee,0x6f,0x79,
0xbd,0xb1,0xf6,0xf5,0x30,0xb6,0xb1,0xa6,0xb8,0xb6,0x7e,0x55,0x71,
0xd3,0xf7,0x5b,0xb5,0xce,0xbf,0x41,0xe5,0xcd,0x3f,0xeb,0x71,0x6b,
0x63,0x6d,0xb1,0xe5,0xf1,0xfd,0x78,0xe4,0xc7,0x2a,0x9b,0xbf,0xff,
0xf1,0xa9,0x9b,0x06,0x15,0xff,0xb7,0xe7,0x04,0xf8,0x68,0x58,0xd5,
0xf8,0x49,0xf1,0x90,0x5a,0xa5,0xfa,0xbd,0xd8,0x27,0x1c,0x99,0xcf,
0xae,0x43,0xe3,0x51,0xe1,0xaa,0xda,0xec,0xea,0x2d,0x2d,0xaf,0xc9,
0xe5,0xfb,0xcd,0xfe,0xf9,0xfc,0xcb,0xe2,0x3b,0x61,0x42,0x36,0x3d,
0x2c,0xc8,0x86,0x85,0x43,0xd2,0x91,0x95,0x9e,0xb5,0xd5,0x61,0x5a,
0xcb,0x7b,0x1a,0xe9,0xe5,0xe1,0x6b,0xb1,0x67,0x78,0x36,0xde,0x95,
0xef,0x61,0xef,0xca,0xe7,0xdf,0x5e,0xd5,0x4e,0xf1,0xe0,0xa4,0x53,
0xdc,0x37,0x7c,0xad,0xf6,0x8d,0x7c,0x56,0x1e,0x91,0x9c,0x19,0x9b,
0x92,0x5d,0x6b,0xbb,0x85,0xaf,0xd6,0xbe,0x12,0xbe,0x5c,0xbb,0x37,
0xbc,0x9c,0x4d,0x0d,0x53,0xf3,0xf9,0x77,0x4f,0xec,0x58,0xed,0x1e,
0x7b,0x27,0x47,0xc6,0xdd,0xc2,0x17,0x6b,0xed,0x72,0x7b,0x87,0x5a,
0x7c,0xa5,0x3a,0x2e,0x9f,0x7f,0x0f,0x65,0xf7,0x27,0x7b,0xc7,0x73,
0x92,0x9e,0xb5,0x6b,0xc3,0xb2,0xf4,0x9e,0x64,0x7c,0x76,0x7f,0xcb,
0xb1,0x89,0xf9,0x0c,0x7e,0x28,0x5f,0x37,0x7e,0x23,0x24,0xf5,0x65,
0xa5,0x35,0x9b,0xef,0x7f,0x17,0x7f,0x7a,0xc0,0x80,0xf8,0x99,0x64,
0xd3,0x9c,0x9b,0xb1,0xe3,0x90,0xb7,0x1a,0xf9,0xe3,0x6b,0x2c,0x2a,
0x6c,0xda,0x13,0x6f,0xd0,0x66,0xc6,0xc7,0x86,0x4c,0xde,0x30,0x1b,
0x81,0x8f,0xb6,0xf7,0xea,0xe5,0x52,0xa1,0xf6,0xab,0x6a,0xcb,0x3a,
0xeb,0xbe,0xda,0x9d,0x61,0x4c,0x6d,0x42,0x58,0x18,0xef,0xaa,0xde,
0x9c,0xde,0x96,0xef,0x37,0x1f,0x0d,0xdd,0xf2,0x39,0x35,0x36,0x5d,
0x54,0x9d,0x92,0x3d,0x16,0x16,0xa4,0x7d,0xc2,0x49,0xe9,0xd0,0xca,
0x80,0xda,0xca,0x30,0x21,0x9d,0x18,0x1e,0x8c,0x17,0x86,0x03,0x63,
0x8f,0xf0,0x54,0x3e,0xff,0x46,0xe5,0x97,0xbf,0x33,0x0e,0xad,0x9e,
0x1e,0xfb,0x86,0xbe,0xb5,0x8b,0x43,0x23,0xde,0x12,0x0e,0xcf,0xf7,
0xca,0x3d,0x6b,0xb7,0x86,0x6a,0xbc,0x20,0x9c,0x5d,0x3b,0x3b,0x0c,
0xa9,0xce,0xaf,0xce,0xcd,0xe7,0xe6,0xfd,0xe9,0xe4,0x70,0x55,0xbe,
0x36,0xec,0x1c,0xef,0x09,0x3f,0x8d,0x85,0xea,0xb9,0xf1,0x7b,0xd5,
0x8b,0x6b,0xa3,0xc2,0x3b,0xe9,0xf4,0xfc,0x36,0xa7,0x86,0xa7,0xb3,
0xa1,0x61,0xaf,0x78,0x7a,0xf2,0xdd,0xda,0xbf,0x55,0x1f,0xcc,0xee,
0xce,0xf7,0xd9,0x31,0x19,0x90,0xef,0x9b,0x27,0xa6,0x0f,0x86,0x05,
0xf9,0x3e,0xbd,0x57,0xb6,0xa8,0xbc,0x66,0xf3,0xcf,0xb6,0xb5,0x7c,
0x9f,0xd5,0xe8,0x4f,0x6f,0xfa,0xae,0xab,0x5d,0x26,0xef,0x3a,0xb4,
0xf5,0xf1,0xd5,0xfb,0xae,0xff,0x3c,0xdc,0xc6,0x63,0x9f,0x37,0xbd,
0x36,0xb8,0xb4,0xb4,0xa5,0x9f,0x77,0x60,0xcb,0x5b,0x9c,0x9d,0x5e,
0x9a,0x90,0xef,0x6f,0x9f,0x4f,0x7f,0x1e,0x16,0xe7,0x5e,0x4a,0x17,
0x86,0xb1,0xe9,0x0d,0xe1,0xf6,0x7c,0xbf,0xf9,0x48,0x7a,0x63,0xd8,
0xb5,0x76,0x78,0x78,0x2e,0x3e,0x15,0x1e,0xcd,0xe6,0x26,0x73,0xf3,
0xb5,0xd7,0x25,0xe9,0x99,0x95,0x31,0xf1,0xcd,0x7c,0xfe,0x4d,0x0e,
0x53,0xe3,0x77,0xc2,0x71,0xb1,0x67,0x72,0x47,0x9c,0x50,0xbd,0x25,
0xb6,0xbc,0x5e,0xf8,0x60,0x78,0x22,0x3e,0x55,0x7d,0x36,0xbe,0x1e,
0x7e,0x9d,0xce,0x0e,0xfb,0xc6,0xb3,0x93,0xf3,0x6a,0xff,0xa7,0xba,
0x3c,0x5b,0x91,0x2c,0x4b,0x97,0x85,0x5f,0xa5,0x2f,0x85,0x49,0xe9,
0xd4,0xd6,0xcf,0xd6,0x9d,0x9c,0xef,0x77,0x8f,0x88,0xef,0x87,0x17,
0xf3,0xdb,0x5b,0x94,0x9f,0xff,0x56,0xfa,0x6e,0xf5,0xf1,0xec,0xde,
0x64,0x5a,0xf6,0x78,0xb8,0x2f,0xdd,0xab,0x7a,0x54,0x3c,0x32,0x79,
0x35,0xbe,0x5a,0x1d,0x9d,0x4e,0xc9,0xe7,0xe5,0x01,0xa1,0x43,0x5c,
0x9a,0xdf,0x9f,0x99,0xe1,0x85,0xf4,0x9a,0xd0,0x21,0x9d,0x52,0x59,
0xdb,0xbc,0xa6,0xb0,0xe9,0xf8,0x97,0x3f,0xd2,0xf2,0xf9,0xb7,0x96,
0xc7,0xd6,0x77,0xe3,0xf1,0xd1,0xf9,0xfe,0x78,0xd3,0x5e,0x79,0xc3,
0xf7,0xe1,0x6f,0xe9,0xe7,0x1d,0xd8,0xf2,0xe6,0x64,0x47,0x97,0x17,
0xc4,0xd9,0xf9,0x4c,0x9a,0x14,0xc6,0xa5,0x77,0x26,0xa3,0xd2,0x9f,
0x85,0x1b,0xd3,0x31,0xf9,0x7e,0x73,0x4a,0x18,0x9f,0x7e,0x27,0xec,
0x13,0x8f,0xcf,0xd7,0x65,0x4f,0x84,0xd9,0xd9,0xf3,0xc9,0x94,0xb8,
0x6b,0xa8,0xa7,0x47,0x55,0x5e,0x8e,0xcf,0x54,0x27,0xa7,0x0f,0x84,
0x71,0xb1,0x43,0xf5,0xe2,0xf4,0x7b,0x95,0x93,0xe2,0xf8,0xea,0xed,
0xe9,0xed,0xf9,0x1a,0xf0,0xae,0xf0,0x70,0xf6,0x64,0x98,0x9b,0x7b,
0x3c,0x3b,0x29,0x1c,0x9c,0x5e,0x98,0xfc,0x38,0xae,0x0a,0x4f,0x65,
0x2f,0x25,0x2f,0x66,0x8b,0xc2,0xfc,0x7c,0x3f,0xfd,0x50,0x3a,0x2d,
0x99,0x98,0xc6,0xb0,0x5b,0xad,0x67,0xe8,0x53,0xfb,0x79,0x18,0x9d,
0xde,0x97,0x9f,0xf7,0x58,0x3e,0x5f,0x27,0xe5,0x7b,0xec,0x87,0x93,
0xe9,0xf5,0x7b,0x92,0xa6,0xf8,0x95,0x70,0x4c,0xed,0xba,0xb0,0x36,
0xbd,0x3b,0x99,0x9c,0xce,0x08,0xa5,0xda,0xae,0xd5,0xf6,0xf1,0x85,
0xf0,0x5c,0xfa,0x54,0x3e,0x2f,0x67,0xe4,0xb3,0xf0,0x87,0x95,0x35,
0xcd,0xab,0x0b,0x9b,0xbe,0xfb,0x65,0xc3,0x1a,0x70,0xe3,0x71,0x7e,
0x9f,0xbc,0xe1,0xaa,0x62,0xcb,0xda,0x6f,0xe3,0xcc,0x6b,0x59,0x0f,
0xee,0x38,0xbd,0xcd,0x90,0x4d,0x97,0x6d,0xfd,0x7e,0x04,0x7b,0x60,
0xf8,0xa8,0x9b,0x92,0x1e,0x52,0xb9,0x26,0x5e,0x15,0x6e,0x8e,0xb7,
0x87,0xdb,0xd3,0x5b,0xab,0xb7,0xa4,0x2d,0x3f,0x47,0x87,0x5b,0xd3,
0xcb,0x43,0xf7,0x5a,0xbb,0xea,0x49,0xb1,0x4f,0x32,0x2d,0x5f,0x73,
0xfd,0x34,0xbd,0xad,0x5a,0xac,0x7d,0x25,0x5c,0x9e,0x5f,0x7e,0x7a,
0xbc,0xb2,0x3a,0x22,0x5e,0x16,0x86,0xe5,0xf3,0xf0,0xca,0xec,0xea,
0xf2,0xee,0xf1,0xac,0xea,0x15,0xf1,0xfa,0x70,0x53,0x7a,0x73,0xcb,
0xf7,0xb7,0x84,0xab,0xd3,0x6a,0xe8,0x1b,0xdb,0x86,0x7e,0xe9,0xd9,
0x95,0xe6,0x7c,0x5f,0x7c,0x6b,0x3a,0x36,0xb9,0x3f,0x1b,0x9f,0xaf,
0x2b,0xc7,0x86,0x31,0xf1,0xea,0x70,0x61,0xed,0x5f,0xc2,0xc1,0xf1,
0xbc,0xe4,0xd0,0x38,0xa2,0xda,0x88,0x3f,0xc9,0x6f,0xef,0x9e,0x7c,
0xf6,0x4e,0xcc,0xe7,0xdf,0x98,0x24,0x4d,0x0f,0xad,0xee,0x5a,0xeb,
0x13,0x7a,0xd5,0xe6,0x84,0x2b,0xd3,0xe1,0xe1,0x87,0xe9,0x15,0x61,
0xef,0xd8,0x14,0xba,0xc7,0x46,0x72,0x4f,0xbc,0x29,0xdc,0x16,0x47,
0xe5,0x7b,0xee,0x01,0xc9,0xca,0xfc,0xbe,0x3f,0x3e,0xf2,0x63,0xe5,
0xcd,0x67,0xda,0xc6,0xf9,0xb7,0x63,0xf3,0x5b,0xe5,0xdb,0xaf,0xfc,
0xf8,0xa6,0x7f,0xfb,0xc4,0x55,0xf5,0xd2,0xa0,0x6b,0xff,0xf0,0x39,
0xb8,0x96,0xef,0x4a,0xd8,0xd2,0xcf,0x3b,0xb0,0xe5,0xcd,0xcc,0x7a,
0x97,0xbf,0x1e,0xbf,0x1e,0xf6,0xab,0x1d,0x18,0xba,0xc5,0xa3,0xab,
0xdd,0x6b,0xdf,0x0d,0xc7,0xd5,0xbe,0x53,0x3d,0xa8,0xf6,0x95,0xea,
0xbf,0xc4,0x1f,0x24,0xc3,0xd3,0x4e,0xc9,0x81,0xb5,0x8e,0x61,0xdf,
0xda,0x7e,0xe1,0x5f,0xe2,0xb7,0xf3,0x3d,0x6e,0xb7,0xca,0x81,0xb5,
0x7d,0xaa,0xfb,0xd6,0xf6,0x0d,0x7b,0xd6,0xbe,0x1e,0xee,0xad,0x2f,
0x28,0xfe,0x20,0xdd,0x23,0x69,0x5f,0x3b,0x24,0x1c,0x19,0x8f,0xaa,
0x1e,0x11,0x3b,0x57,0xf7,0xa9,0xed,0x9e,0x5f,0xf6,0x9b,0xe1,0xa7,
0xd9,0xa0,0x72,0xfb,0xb8,0x6f,0xb5,0x43,0xed,0xc0,0x6a,0xb7,0xd8,
0xb5,0xda,0x35,0x76,0xc9,0xaf,0xf7,0x6b,0xd5,0x2f,0xc5,0x2e,0xe1,
0xea,0xec,0x9a,0xf2,0x37,0xe3,0xee,0xe1,0x6b,0xb5,0x4e,0xd5,0x23,
0x63,0x53,0xf5,0x84,0x78,0x42,0xe8,0x11,0x0f,0xc8,0xf7,0xdb,0x1d,
0xc3,0xb0,0x2c,0xa9,0x74,0xae,0x75,0xa9,0xb6,0xaf,0xed,0x13,0x3a,
0xe4,0xb7,0xb1,0x7b,0xfa,0xa3,0x4a,0x21,0xb6,0x4f,0x3a,0xd5,0xf6,
0xab,0x76,0xac,0x75,0xac,0x7e,0x25,0x0e,0x69,0x9d,0x7f,0x2d,0x6b,
0xbc,0x4f,0x3c,0xb1,0xcb,0xe0,0x96,0xe3,0xfa,0x3e,0x7e,0xf9,0x86,
0xf7,0x3f,0x5a,0x8f,0xf1,0x5b,0x5b,0xee,0xb2,0xf1,0xff,0xfe,0x58,
0xfc,0xe9,0x01,0x7d,0xeb,0x6b,0x4b,0x2d,0x97,0xdd,0x69,0x7e,0x9b,
0x41,0x2d,0xa7,0xbb,0xa4,0xb7,0x57,0xb6,0xf4,0xf3,0x0e,0x6c,0x79,
0x8b,0xea,0xa3,0x8a,0x49,0x76,0x7e,0xe5,0xbb,0xe9,0x09,0x49,0x8f,
0x78,0x4c,0x72,0x74,0x3c,0x3c,0x39,0x2c,0x76,0x49,0x7a,0xc5,0xd3,
0x2a,0x83,0xb3,0xbb,0xca,0xa3,0xb3,0xf3,0xcb,0xdf,0x4f,0xcf,0xab,
0x9c,0x9a,0xf6,0x4a,0x8e,0x49,0x07,0x55,0x66,0x64,0x23,0x4a,0x17,
0xa7,0x83,0x2b,0x03,0xd3,0xb3,0x2a,0x7d,0xf3,0xd3,0x4f,0x35,0x56,
0x14,0xa6,0x64,0xc5,0xf2,0xf1,0xf1,0xa8,0xa4,0x73,0x3c,0x28,0x74,
0x8e,0x47,0x87,0xde,0xf1,0xfc,0x4a,0x23,0xbb,0xb9,0xfc,0x68,0x76,
0x5d,0xe9,0xbc,0xf4,0xf4,0xfc,0x6f,0x4f,0xad,0xf4,0x8e,0xdd,0x93,
0x23,0xd3,0x63,0x92,0xde,0x69,0xcf,0xe4,0xdc,0xf4,0xb2,0xf2,0xfd,
0xf5,0xdb,0x4b,0xf5,0xac,0x54,0xfe,0x5e,0x7a,0x5c,0xf2,0xed,0x78,
0x50,0xd2,0x29,0x7e,0x2b,0xff,0xdb,0xee,0xc9,0x59,0xf9,0x7a,0x72,
0x5e,0xfd,0xe6,0xd2,0xd9,0xe9,0xf7,0x2b,0x7d,0xb3,0x61,0x95,0x62,
0x36,0xb4,0x92,0xd5,0x67,0x97,0xc6,0x64,0x17,0x94,0xfb,0xa7,0x03,
0x2a,0xa7,0xa5,0x4d,0x95,0xde,0xf9,0x3c,0x7c,0xb7,0x79,0x79,0x61,
0x79,0xf3,0xaa,0x42,0x16,0x77,0xad,0xec,0x50,0xeb,0x50,0xfd,0x71,
0xf3,0x8e,0x95,0x3f,0x1c,0xfb,0xb7,0xb6,0xb8,0xc3,0xf4,0xb6,0x43,
0x37,0x7e,0x27,0xfe,0xa2,0xc6,0xfa,0xc7,0x3a,0x28,0x7e,0x26,0xd9,
0x21,0xf6,0x0d,0x1b,0x4f,0x03,0x1f,0x6d,0xef,0x36,0xbf,0x5d,0x78,
0xa5,0xf1,0x4c,0xf1,0xc9,0xc6,0x93,0xc5,0x99,0x8d,0x27,0x72,0x0f,
0x95,0xa6,0xd5,0x1f,0x2a,0x3d,0xd1,0x98,0x57,0x7c,0xb6,0xf1,0x72,
0x71,0x61,0x63,0x76,0xf1,0xf1,0xfc,0xf7,0x59,0xf5,0x07,0x4a,0x53,
0xea,0x8f,0x97,0xde,0x6e,0xbc,0x5c,0x58,0xd8,0x78,0x21,0x3f,0xff,
0xd1,0xfc,0x6f,0x16,0x14,0x97,0x36,0xaf,0x2e,0x2c,0x6d,0x2c,0x2c,
0xcc,0xaa,0x3f,0x58,0x9a,0xdc,0x98,0x54,0x9a,0x98,0xff,0x9c,0xd9,
0x78,0xb6,0xb8,0xb8,0x79,0x69,0xe1,0xcd,0xc6,0xc2,0xe2,0xbc,0xc6,
0xe3,0xb9,0x79,0xc5,0xc7,0x1a,0x0f,0x97,0x1e,0xaa,0x3f,0x5c,0x9a,
0xd1,0x78,0xa4,0x34,0x37,0xff,0xf7,0xf9,0xf9,0xed,0x3d,0x93,0x5f,
0xff,0xbc,0xc6,0xcc,0xe2,0x03,0xf5,0x49,0xa5,0x71,0x8d,0xfb,0x4a,
0x93,0x1a,0xd3,0x4b,0xf3,0x1a,0xaf,0x17,0x57,0x36,0x9e,0x2f,0x3c,
0x91,0xff,0xdd,0xec,0xc6,0x2b,0xc5,0x57,0xf3,0xcb,0xbc,0xd6,0xbc,
0xac,0xf8,0x72,0xe3,0xe9,0xfc,0xf2,0xcf,0xe5,0xf7,0xe3,0xa1,0xd2,
0x43,0xf9,0xfd,0xfd,0x65,0xf3,0xbb,0xb9,0x95,0x85,0x49,0x59,0x53,
0x79,0xe7,0x45,0x9f,0x1d,0xd8,0xe5,0x9a,0x9d,0xca,0x1b,0xbf,0x07,
0x75,0x61,0x7e,0xbb,0xad,0x9f,0x8d,0x6b,0xf9,0x4e,0xfc,0x91,0x3f,
0xb6,0xd6,0x03,0xfe,0xbf,0xd6,0xfc,0x8f,0xff,0xfe,0x7e,0x61,0x55,
0xf3,0x9a,0xd6,0xcb,0xac,0x69,0xfd,0x3f,0x81,0xdf,0xff,0xc0,0xbf,
0xad,0x3f,0x7f,0xcd,0x1f,0x5d,0xdf,0x9a,0xcd,0x7e,0x5f,0xfd,0xdf,
0x5e,0xef,0xf2,0x7c,0xa6,0xad,0xde,0xec,0xbc,0xd5,0x1f,0xb8,0x9e,
0xd5,0xff,0xcf,0xf5,0xae,0xde,0xec,0x3a,0x57,0xb7,0x6a,0xb9,0x3f,
0x6b,0x0a,0x4d,0x77,0xaf,0xff,0x0e,0x98,0x9d,0xe7,0x7e,0x7a,0xd0,
0xa6,0xd7,0xf6,0x1a,0x33,0xd6,0x1f,0x1b,0xb3,0x70,0xa7,0x4b,0x06,
0xb5,0xec,0x7d,0xb7,0x82,0xe7,0x19,0xe0,0xaf,0x6a,0xe3,0x9c,0xdb,
0xec,0xd8,0x97,0x4f,0x5c,0x7d,0x7b,0x69,0x6d,0xe3,0xad,0x42,0xcb,
0xfb,0xbd,0x3b,0x5d,0xfb,0xfd,0xf2,0x16,0xbf,0x8f,0x00,0x7f,0x23,
0x1f,0xf8,0x7c,0x47,0xeb,0xf7,0xc0,0xac,0x5f,0xef,0xb5,0xbc,0xd6,
0x67,0xed,0x07,0x6c,0xcf,0x7e,0x9c,0x76,0xa8,0xb4,0x7e,0xee,0x77,
0xed,0x2e,0x17,0x7d,0xf2,0x86,0xb3,0x4a,0x8f,0x3b,0xae,0x0f,0xd8,
0x60,0x4d,0xeb,0xeb,0x77,0xdb,0xb1,0xc6,0xdb,0x85,0xef,0xc7,0x1d,
0xc2,0x0e,0xb5,0x2f,0x55,0x63,0x7d,0x4d,0x69,0x8b,0xdf,0x1f,0x80,
0xbf,0xbb,0xf7,0x0b,0x2b,0xb6,0xf8,0x7d,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xe0,0xc3,0x5a,0xbd,0xe9,
0xfb,0xf2,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x60,0xab,0x32,0x0c,0x00,0x00,0x00,0xb6,0x77,0xef,0x37,
0xbf,0x5f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xb6,
0x31,0xc3,0xdf,0x1f,0x06,0x00,0x00,0x00,0xdb,0xbd,0x66,0x00,0x00,
0x00,0xd8,0xfe,0xad,0x6a,0x5e,0x55,0x00,0x00,0x00,0x00,0x00,0x00,
0xd8,0xae,0x0c,0x5f,0x35,0x0c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0xd8,0xb6,0xac,0x1c,0xbe,0xb2,0x00,0x00,0xc0,0x47,0xca,
0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0xd8,0xda,0xac,0x18,0xbe,0x02,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x8b,0x7a,0x6f,
0xf8,0x7b,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0xc0,0x56,0x62,0xf9,0xf0,0xe5,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0x56,0x62,
0xd9,0x88,0x65,0x00,0x1f,0x4d,0xc3,0x01,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x80,0x6d,0xd0,0x50,0x00,0x00,0x00,0xd8,0xde,0xfd,
0x72,0xc4,0x2f,0x87,0x01,0x00,0x00,0x00,0x00,0x00,0x6c,0x57,0x86,
0x03,0x7c,0x64,0x0d,0x05,0x00,0x00,0x00,0x00,0x00,0xd8,0x9e,0xbc,
0x3b,0xe2,0xdd,0x61,0x00,0x00,0x00,0x00,0xc0,0x76,0x6b,0x28,0x00,
0x00,0x00,0x00,0x00,0xc0,0x76,0x65,0x38,0x00,0x00,0x00,0x6c,0xff,
0xde,0x19,0xf1,0xce,0x30,0x80,0x8f,0xa8,0xa1,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xdb,0x82,0xa5,0x23,0x96,0x02,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x6c,0x13,0xde,
0x1e,0xf1,0x36,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xb0,
0x8d,0x59,0x32,0x62,0x09,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0xc0,0x36,0xe1,0xad,0x4b,0xdf,0x02,0x00,0x00,0x00,0x00,
0x00,0x00,0x60,0x7b,0x30,0x02,0x00,0x00,0x00,0xb6,0x7f,0x6f,0x5e,
0xfa,0x26,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,
0xb6,0x62,0x08,0x00,0x00,0x00,0x6c,0xef,0xde,0xb8,0xf4,0x8d,0xa1,
0x00,0x00,0x00,0x00,0x00,0x00,0xdb,0x99,0x21,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xdb,0x82,0xd7,0x2f,0x7d,0x1d,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x9b,0xf0,
0x8b,0x4b,0x7f,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0xc0,0x56,0x6c,0xf1,0xa5,0x8b,0x01,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x80,0x6d,0xcf,0x60,0x00,0x00,0x00,0x00,0x60,
0xfb,0xf4,0xf3,0x91,0x3f,0x1f,0x02,0xf0,0x91,0x74,0x29,0x00,0x00,
0x00,0x00,0xb0,0x1d,0x1b,0x0c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0xdb,0xaa,0xd7,0x46,0xbe,0x36,0x04,0x00,0x80,0x8f,0x94,0xc1,
0x00,0x00,0x00,0xb0,0xdd,0xbb,0x14,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0xb6,0x5d,0xaf,0x8e,0x7c,0x15,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xd8,0x4a,0xbc,0x32,
0xf2,0x15,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x80,0x2d,0xea,0xe5,0x91,0x2f,0x03,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x6c,0x51,0x2f,0x8d,0x7c,0x09,0x00,0x80,0x8f,0x92,0xcb,0x00,0x00,
0x00,0x00,0x80,0xed,0xd6,0x96,0x7e,0xfd,0x11,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0xfe,0x32,0x83,0x00,0x3e,0x8a,0x5e,0xbc,0xec,
0xc5,0xc1,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x6c,0xd5,0x06,0x01,0x7c,0x24,0x8d,0x04,0x00,0x00,0x00,0x00,
0xb6,0x57,0x8b,0x2e,0x5b,0x34,0x18,0x00,0x00,0x00,0x00,0x00,0x00,
0x80,0xed,0xc2,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0xb6,0x5e,0x2f,0x5c,0xf6,0xc2,0x60,0x00,0x00,0x00,
0xf8,0x08,0x18,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0xb0,0x25,0x3d,0x7f,0xd9,0xf3,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0xf0,0x77,0xf3,0xdc,0x65,0xcf,0x01,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x7f,0x63,0x0b,0x2f,0x5b,0x08,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7f,0xb1,0x1d,0x24,0x49,0x92,
0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,
0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,
0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,
0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,
0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,
0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,
0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,
0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,
0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,
0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,
0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,
0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,
0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,
0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,
0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,
0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,
0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,
0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,
0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,
0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,
0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,
0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,
0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,
0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,
0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,
0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,
0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,
0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,
0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,
0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,
0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,
0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,
0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,
0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,
0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,
0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,
0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,
0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,
0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,
0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,
0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,
0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,
0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,
0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,
0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,
0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,
0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,
0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,
0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,
0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,
0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,
0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,
0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,
0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,
0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,
0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,
0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,
0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,
0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,
0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,
0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,
0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,
0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,
0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,
0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,
0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,
0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,
0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,0x92,0x24,0x49,
0x92,0x24,0x49,0x92,0x24,0x49,0x7f,0x97,0xfe,0x2f,0x91,0x73,0x60,
0x14,0x14
};

View File

@ -500,7 +500,8 @@ SaveSRAMToMC (int slot, int silent)
int datasize;
int offset;
ShowAction ((char*) "Saving SRAM to MC...");
if (!silent)
ShowAction ((char*) "Saving SRAM to MC...");
/*** Build SRAM filename ***/
sprintf (filename, "%s.srm", Memory.ROMName);
@ -551,7 +552,8 @@ SavePrefsToMC (int slot, int silent)
int offset;
char msg[80];
ShowAction ((char*) "Saving Prefs to MC...");
if (!silent)
ShowAction ((char*) "Saving Prefs to MC...");
datasize = preparePrefsData ();
offset = SaveBufferToMC (savebuffer, slot, PREFS_FILE_NAME, datasize, silent);

View File

@ -47,9 +47,7 @@ extern unsigned char savebuffer[];
static int bufoffset;
static char membuffer[MEMBUFFER];
char freezecomment[2][32] = { {"Snes9x GX 2.0.1b8 Freeze"}, {"Freeze"} };
extern char rootSDdir[MAXPATHLEN];
char freezecomment[2][32] = { {"Snes9x GX 003 Freeze"}, {"Freeze"} };
/**
@ -153,10 +151,10 @@ NGCFreezeGame (int where, bool8 silent)
/*** Freeze to SDCard in slot A or slot B ***/
#ifdef SDUSE_LFN
sprintf (filename, "%s/%s/%s.frz", rootSDdir, SNESSAVEDIR, Memory.ROMName);
sprintf (filename, "%s/%s/%s.frz", ROOTSDDIR, SNESSAVEDIR, Memory.ROMName);
#else
/*** Until we have LFN on SD ... ***/
sprintf (filename, "%s/%s/%08x.frz", rootSDdir, SNESSAVEDIR, Memory.ROMCRC32);
sprintf (filename, "%s/%s/%08x.frz", ROOTSDDIR, SNESSAVEDIR, Memory.ROMCRC32);
#endif
}
else
@ -182,7 +180,8 @@ NGCFreezeGame (int where, bool8 silent)
if (smbfile)
{
ShowAction ((char*) "Saving freeze game...");
if (!silent)
ShowAction ((char*) "Saving freeze game...");
len = bufoffset;
offset = 0;
@ -222,7 +221,8 @@ NGCFreezeGame (int where, bool8 silent)
if (handle > 0)
{
ShowAction ((char*) "Saving freeze game...");
if (!silent)
ShowAction ((char*) "Saving freeze game...");
len = fwrite (membuffer, 1, bufoffset, handle);
fclose (handle);
@ -238,13 +238,14 @@ NGCFreezeGame (int where, bool8 silent)
}
else
{
sprintf(msg, "Couldn't save to %s/%s/", rootSDdir, SNESSAVEDIR);
sprintf(msg, "Couldn't save to %s/%s/", ROOTSDDIR, SNESSAVEDIR);
WaitPrompt (msg);
}
}
else /*** MC in slot A or slot B ***/
{
ShowAction ((char*) "Saving freeze game...");
if (!silent)
ShowAction ((char*) "Saving freeze game...");
ClearSaveBuffer ();
@ -378,10 +379,10 @@ NGCUnfreezeGame (int from, bool8 silent)
{
#ifdef SDUSE_LFN
sprintf (filename, "%s/%s/%s.frz", rootSDdir, SNESSAVEDIR, Memory.ROMName);
sprintf (filename, "%s/%s/%s.frz", ROOTSDDIR, SNESSAVEDIR, Memory.ROMName);
#else
/*** From SDCard ***/
sprintf (filename, "%s/%s/%08x.frz", rootSDdir, SNESSAVEDIR, Memory.ROMCRC32);
sprintf (filename, "%s/%s/%08x.frz", ROOTSDDIR, SNESSAVEDIR, Memory.ROMCRC32);
#endif
handle = fopen (filename, "rb");

View File

@ -30,7 +30,7 @@
#include "video.h"
#include "mcsave.h"
#include "filesel.h"
#include "ngcunzip.h"
#include "unzip.h"
#include "smbload.h"
#include "mcsave.h"
#include "sdload.h"
@ -43,7 +43,7 @@
#include "button_mapping.h"
#include "ftfont.h"
extern void DrawMenu (char items[][20], char *title, int maxitems, int selected);
extern void DrawMenu (char items[][20], char *title, int maxitems, int selected, int fontsize);
#define PSOSDLOADID 0x7c6000a6
extern int menu;
@ -181,7 +181,7 @@ LoadManager ()
{
case 0:
/*** Load from SD ***/
quit = OpenSD (0);
quit = OpenSD ();
break;
case 1:
@ -208,14 +208,14 @@ LoadManager ()
if ( retval == 1 ) // if ROM was loaded, load the SRAM & settings
{
if ( GCSettings.AutoLoad == 1 )
{
quickLoadSRAM ( SILENT );
S9xSoftReset(); // reset after loading sram
}
else if ( GCSettings.AutoLoad == 2 )
{
/*** load SRAM first in order to get joypad config ***/
quickLoadSRAM ( SILENT );
quickLoadFreeze ( SILENT );
}
S9xSoftReset(); // reset after loading sram
}
menu = oldmenu;
@ -250,23 +250,23 @@ SaveManager ()
{
if ( isWii ) /* Wii menu */
{
ret = RunMenu (savemenuwii, savecountwii, (char*)"Save Manager");
ret = RunMenu (savemenuwii, savecountwii, (char*)"SRAM Manager");
if (ret >= savecountwii-1)
ret = savecount-1;
}
else /* Gamecube menu */
ret = RunMenu (savemenu, savecount, (char*)"Save Manager");
ret = RunMenu (savemenu, savecount, (char*)"SRAM Manager");
switch (ret)
{
case 0:
/*** Save to SD***/
SaveSRAMToSD (0, NOTSILENT);
SaveSRAMToSD (NOTSILENT);
break;
case 1:
/*** Load from SD***/
LoadSRAMFromSD (0, NOTSILENT);
LoadSRAMFromSD (NOTSILENT);
break;
case 2:
@ -448,6 +448,7 @@ GetInput (u16 ctrlr_type)
{
u32 exp_type, pressed;
pressed=0;
s8 gc_px = 0;
while( PAD_ButtonsHeld(0)
#ifdef HW_RVL
@ -459,13 +460,14 @@ GetInput (u16 ctrlr_type)
{
VIDEO_WaitVSync();
// get input based on controller type
//if (ctrlr_type == CTRLR_GCPAD)
//{
if (ctrlr_type == CTRLR_GCPAD)
{
pressed = PAD_ButtonsHeld (0);
//}
gc_px = PAD_SubStickX (0);
}
#ifdef HW_RVL
//else
//{
else
{
// if ( WPAD_Probe( 0, &exp_type) == 0) // check wiimote and expansion status (first if wiimote is connected & no errors)
// {
pressed = WPAD_ButtonsHeld (0);
@ -473,8 +475,11 @@ GetInput (u16 ctrlr_type)
// if (ctrlr_type != CTRLR_WIIMOTE && exp_type != ctrlr_type+1) // if we need input from an expansion, and its not connected...
// pressed = 0;
// }
//}
}
#endif
/*** check for exit sequence (c-stick left OR home button) ***/
if ( (gc_px < -70) || (pressed & WPAD_BUTTON_HOME) || (pressed & WPAD_CLASSIC_BUTTON_HOME) )
return 0;
} // end while
while( pressed == (PAD_ButtonsHeld(0)
#ifdef HW_RVL
@ -485,19 +490,23 @@ GetInput (u16 ctrlr_type)
return pressed;
} // end GetInput()
int cfg_text_count = 4;
int cfg_text_count = 7;
char cfg_text[][20] = {
" ",
"Remapping ",
"Press Any Button",
"on the",
" " // identify controller
" ", // identify controller
" ",
"Press C-Left or",
"Home to exit"
};
u32
GetButtonMap(u16 ctrlr_type, char* btn_name)
{
u32 pressed, previous;
char title[20];
char temp[20] = "";
int k;
pressed = 0; previous = 1;
switch (ctrlr_type) {
@ -515,9 +524,13 @@ GetButtonMap(u16 ctrlr_type, char* btn_name)
break;
};
sprintf (cfg_text[0], "Remapping %s", btn_name); // note which button we are remapping
/*** note which button we are remapping ***/
sprintf (temp, (char*)"Remapping ");
for (k=0; k<9-strlen(btn_name) ;k++) strcat(temp, " "); // add whitespace padding to align text
strncat (temp, btn_name, 9); // snes button we are remapping
strncpy (cfg_text[0], temp, 19); // copy this all back to the text we wish to display
DrawMenu(&cfg_text[0], title, cfg_text_count, 1); // display text
DrawMenu(&cfg_text[0], NULL, cfg_text_count, 1); // display text
// while (previous != pressed && pressed == 0); // get two consecutive button presses (which are the same)
// {
@ -562,7 +575,7 @@ ConfigureButtons (u16 ctrlr_type)
unsigned int* currentpadmap;
char temp[20] = "";
int i, j;
int i, j, k;
/*** Update Menu Title (based on controller we're configuring) ***/
switch (ctrlr_type) {
@ -591,21 +604,24 @@ ConfigureButtons (u16 ctrlr_type)
{
// get current padmap button name to display
for ( j=0;
j < ctrlr_def[ctrlr_type].num_btns &&
currentpadmap[i] != ctrlr_def[ctrlr_type].map[j].btn // match padmap button press with button names
&& j < ctrlr_def[ctrlr_type].num_btns
; j++ );
memset (temp, 0, sizeof(temp));
strncpy (temp, cfg_btns_menu[i], 12); // copy snes button information
if (currentpadmap[i] == ctrlr_def[ctrlr_type].map[j].btn) // check if a match was made
{
for (k=0; k<7-strlen(ctrlr_def[ctrlr_type].map[j].name) ;k++) strcat(temp, " "); // add whitespace padding to align text
strncat (temp, ctrlr_def[ctrlr_type].map[j].name, 6); // update button map display
}
else
strcat (temp, (char*)"---"); // otherwise, button is 'unmapped'
strncpy (cfg_btns_menu[i], temp, 19); // move back updated information
}
ret = RunMenu (cfg_btns_menu, cfg_btns_count, menu_title);
ret = RunMenu (cfg_btns_menu, cfg_btns_count, menu_title, 18);
switch (ret)
{
@ -627,7 +643,8 @@ ConfigureButtons (u16 ctrlr_type)
strncpy(temp, cfg_btns_menu[ret], 6); // get the name of the snes button we're changing
pressed = GetButtonMap(ctrlr_type, temp); // get a button selection from user
// FIX: check if input is valid for this controller
currentpadmap[ret] = pressed; // update mapping
if (pressed != 0) // check if a the button was configured, or if the user exited.
currentpadmap[ret] = pressed; // update mapping
break;
case -1: /*** Button B ***/

View File

@ -31,7 +31,7 @@ extern unsigned int wmpadmap[];
extern unsigned int ccpadmap[];
extern unsigned int ncpadmap[];
#define PREFSVERSTRING "Snes9x GX 002 Prefs"
#define PREFSVERSTRING "Snes9x GX 003 Prefs"
char prefscomment[2][32] = { {PREFSVERSTRING}, {"Preferences"} };
@ -125,7 +125,7 @@ void quickLoadPrefs (bool8 silent)
case CARD_SLOTA+2:
case CARD_SLOTB+2:
LoadPrefsFromSD(QUICK_SAVE_SLOT-2, silent);
LoadPrefsFromSD(silent);
break;
case CARD_SLOTA+4:
@ -144,7 +144,7 @@ void quickSavePrefs (bool8 silent)
break;
case CARD_SLOTA+2:
case CARD_SLOTB+2:
SavePrefsToSD(QUICK_SAVE_SLOT-2, silent);
SavePrefsToSD(silent);
break;
case CARD_SLOTA+4:
SavePrefsToSMB(silent);

View File

@ -14,7 +14,7 @@
#include <string.h>
#include <ogcsys.h>
#include "sdload.h"
#include "ngcunzip.h"
#include "unzip.h"
#include "memmap.h"
#include "video.h"
#include "ftfont.h"
@ -27,13 +27,40 @@
extern unsigned char savebuffer[];
extern char output[16384];
FILE * filehandle;
char rootSDdir[MAXPATHLEN] = "fat:/";
char currSDdir[MAXPATHLEN];
extern int offset;
extern int selection;
extern FILEENTRIES filelist[MAXFILES];
/***************************************************************************
* FileSortCallback
*
* Quick sort callback to sort file entries with the following order:
* .
* ..
* <dirs>
* <files>
***************************************************************************/
static int FileSortCallback(const void *f1, const void *f2)
{
/* Special case for implicit directories */
if(((FILEENTRIES *)f1)->filename[0] == '.' || ((FILEENTRIES *)f2)->filename[0] == '.')
{
if(strcmp(((FILEENTRIES *)f1)->filename, ".") == 0) { return -1; }
if(strcmp(((FILEENTRIES *)f2)->filename, ".") == 0) { return 1; }
if(strcmp(((FILEENTRIES *)f1)->filename, "..") == 0) { return -1; }
if(strcmp(((FILEENTRIES *)f2)->filename, "..") == 0) { return 1; }
}
/* If one is a file and one is a directory the directory is first. */
if(((FILEENTRIES *)f1)->flags == 1 && ((FILEENTRIES *)f2)->flags == 0) return -1;
if(((FILEENTRIES *)f1)->flags == 0 && ((FILEENTRIES *)f2)->flags == 1) return 1;
return stricmp(((FILEENTRIES *)f1)->filename, ((FILEENTRIES *)f2)->filename);
}
/***************************************************************************
* Update SDCARD curent directory name
***************************************************************************/
@ -75,7 +102,7 @@ int updateSDdirname()
/* handles root name */
sprintf(temp, "/%s/..", SNESROMDIR);
if (strcmp(currSDdir, temp) == 0)
sprintf(currSDdir,"%s",rootSDdir);
sprintf(currSDdir,"%s",ROOTSDDIR);
/* update current directory name */
sprintf(currSDdir, "%s/%s",currSDdir, filelist[selection].filename);
@ -103,7 +130,7 @@ int parseSDdirectory() {
/* open the directory */
sddir = diropen(currSDdir);
if (sddir == NULL) {
sprintf(currSDdir,"%s",rootSDdir); // if we can't open the previous dir, open root dir
sprintf(currSDdir,"%s",ROOTSDDIR); // if we can't open the previous dir, open root dir
sddir = diropen(currSDdir);
WaitPrompt(msg);
if (sddir == NULL) {
@ -128,6 +155,9 @@ int parseSDdirectory() {
/*** close directory ***/
dirclose(sddir);
/* Sort the file list */
qsort(filelist, nbfiles, sizeof(FILEENTRIES), FileSortCallback);
return nbfiles;
}
@ -141,14 +171,10 @@ LoadSDFile (char *filename, int length)
char zipbuffer[2048];
char filepath[MAXPATHLEN];
FILE *handle;
char *rbuffer;
PKZIPHEADER pkzip;
z_stream zs;
int res, outbytes = 0;
int size;
int have;
unsigned char *rbuffer;
u32 size;
rbuffer = (char *) Memory.ROM;
rbuffer = (unsigned char *) Memory.ROM;
/* Check filename length */
if ((strlen(currSDdir)+1+strlen(filelist[selection].filename)) < MAXPATHLEN)
@ -167,67 +193,11 @@ LoadSDFile (char *filename, int length)
if (IsZipFile (zipbuffer))
{
/*** Unzip the ROM ***/
memcpy (&pkzip, zipbuffer, sizeof (PKZIPHEADER));
pkzip.uncompressedSize = FLIP32 (pkzip.uncompressedSize);
memset (&zs, 0, sizeof (zs));
zs.zalloc = Z_NULL;
zs.zfree = Z_NULL;
zs.opaque = Z_NULL;
zs.avail_in = 0;
zs.next_in = Z_NULL;
res = inflateInit2 (&zs, -MAX_WBITS);
if (res != Z_OK)
{
fclose (handle);
return 0;
}
size = (sizeof (PKZIPHEADER) +
FLIP16 (pkzip.filenameLength) +
FLIP16 (pkzip.extraDataLength));
do
{
zs.avail_in = 2048 - size;
zs.next_in = (Bytef *) zipbuffer + size;
do
{
zs.avail_out = 16384;
zs.next_out = (Bytef *) output;
res = inflate (&zs, Z_NO_FLUSH);
have = 16384 - zs.avail_out;
if (have)
{
memcpy (rbuffer + outbytes, output, have);
outbytes += have;
}
}
while (zs.avail_out == 0);
sprintf (filepath, "Read %d bytes of %d", outbytes,
pkzip.uncompressedSize);
//ShowAction (filepath);
ShowProgress (filepath, outbytes, pkzip.uncompressedSize);
size = 0;
fread (zipbuffer, 1, 2048, handle);
}
while (res != Z_STREAM_END
&& (u32) outbytes < pkzip.uncompressedSize);
inflateEnd (&zs);
/*** Unzip the ROM ***/
size = UnZipBuffer (rbuffer, 0, 0, handle); // unzip from SD
fclose (handle);
return pkzip.uncompressedSize;
return size;
}
else
@ -326,18 +296,19 @@ SaveBufferToSD (char *filepath, int datasize, bool silent)
/****************************************************************************
* Save SRAM to SD Card
****************************************************************************/
void SaveSRAMToSD (int slot, bool silent)
void SaveSRAMToSD (bool silent)
{
char filepath[1024];
int datasize;
int offset;
ShowAction ((char*) "Saving SRAM to SD...");
if (!silent)
ShowAction ((char*) "Saving SRAM to SD...");
#ifdef SDUSE_LFN
sprintf (filepath, "%s/%s/%s.srm", rootSDdir, SNESSAVEDIR, Memory.ROMName);
sprintf (filepath, "%s/%s/%s.srm", ROOTSDDIR, SNESSAVEDIR, Memory.ROMName);
#else
sprintf (filepath, "%s/SNESSAVE/%08x.srm", rootSDdir, Memory.ROMCRC32);
sprintf (filepath, "%s/%s/%08x.srm", ROOTSDDIR, SNESSAVEDIR, Memory.ROMCRC32);
#endif
datasize = prepareEXPORTsavedata ();
@ -359,7 +330,7 @@ void SaveSRAMToSD (int slot, bool silent)
* Load SRAM From SD Card
****************************************************************************/
void
LoadSRAMFromSD (int slot, bool silent)
LoadSRAMFromSD (bool silent)
{
char filepath[1024];
int offset = 0;
@ -367,9 +338,9 @@ LoadSRAMFromSD (int slot, bool silent)
ShowAction ((char*) "Loading SRAM from SD...");
#ifdef SDUSE_LFN
sprintf (filepath, "%s/%s/%s.srm", rootSDdir, SNESSAVEDIR, Memory.ROMName);
sprintf (filepath, "%s/%s/%s.srm", ROOTSDDIR, SNESSAVEDIR, Memory.ROMName);
#else
sprintf (filepath, "%s/%s/%08x.srm", rootSDdir, SNESSAVEDIR, Memory.ROMCRC32);
sprintf (filepath, "%s/%s/%08x.srm", ROOTSDDIR, SNESSAVEDIR, Memory.ROMCRC32);
#endif
offset = LoadBufferFromSD (filepath, silent);
@ -391,18 +362,19 @@ LoadSRAMFromSD (int slot, bool silent)
* Save Preferences to SD Card
****************************************************************************/
void
SavePrefsToSD (int slot, bool silent)
SavePrefsToSD (bool silent)
{
char filepath[1024];
int datasize;
int offset;
ShowAction ((char*) "Saving prefs to SD...");
if (!silent)
ShowAction ((char*) "Saving prefs to SD...");
#ifdef SDUSE_LFN
sprintf (filepath, "%s/%s/%s", rootSDdir, SNESSAVEDIR, PREFS_FILE_NAME);
sprintf (filepath, "%s/%s/%s", ROOTSDDIR, SNESSAVEDIR, PREFS_FILE_NAME);
#else
sprintf (filepath, "%s/%s/%s", rootSDdir, SNESSAVEDIR, PREFS_FILE_NAME);
sprintf (filepath, "%s/%s/%s", ROOTSDDIR, SNESSAVEDIR, PREFS_FILE_NAME);
#endif
datasize = preparePrefsData ();
@ -420,7 +392,7 @@ SavePrefsToSD (int slot, bool silent)
* Load Preferences from SD Card
****************************************************************************/
void
LoadPrefsFromSD (int slot, bool silent)
LoadPrefsFromSD (bool silent)
{
char filepath[1024];
int offset = 0;
@ -428,9 +400,9 @@ LoadPrefsFromSD (int slot, bool silent)
ShowAction ((char*) "Loading prefs from SD...");
#ifdef SDUSE_LFN
sprintf (filepath, "%s/%s/%s", rootSDdir, SNESSAVEDIR, PREFS_FILE_NAME);
sprintf (filepath, "%s/%s/%s", ROOTSDDIR, SNESSAVEDIR, PREFS_FILE_NAME);
#else
sprintf (filepath, "%s/%s/%s", rootSDdir, SNESSAVEDIR, PREFS_FILE_NAME);
sprintf (filepath, "%s/%s/%s", ROOTSDDIR, SNESSAVEDIR, PREFS_FILE_NAME);
#endif
offset = LoadBufferFromSD (filepath, silent);

View File

@ -21,15 +21,15 @@
#include <sys/stat.h>
#include <unistd.h>
static int FileSortCallback(const void *f1, const void *f2);
int updateSDdirname();
int parseSDdirectory();
int LoadSDFile (char *filename, int length);
void SaveSRAMToSD (int slot, bool silent);
void LoadSRAMFromSD (int slot, bool silent);
void SavePrefsToSD (int slot, bool silent);
void LoadPrefsFromSD (int slot, bool silent);
void SaveSRAMToSD (bool silent);
void LoadSRAMFromSD (bool silent);
void SavePrefsToSD (bool silent);
void LoadPrefsFromSD (bool silent);
extern char rootSDdir[MAXPATHLEN];
extern char currSDdir[MAXPATHLEN];
#endif

View File

@ -18,7 +18,7 @@ extern "C"
{
#include "smb.h"
}
#include "ngcunzip.h"
#include "unzip.h"
#include "memmap.h"
#include "video.h"
#include "ftfont.h"
@ -382,7 +382,9 @@ SaveSRAMToSMB (bool8 silent)
int offset;
sprintf (filepath, "%s\\%s.srm", SNESSAVEDIR, Memory.ROMName);
ShowAction ((char*) "Saving SRAM to SMB...");
if (!silent)
ShowAction ((char*) "Saving SRAM to SMB...");
datasize = prepareEXPORTsavedata ();
@ -436,7 +438,9 @@ SavePrefsToSMB (bool8 silent)
int offset;
sprintf (filepath, "%s\\%s", SNESSAVEDIR, PREFS_FILE_NAME);
ShowAction ((char*) "Saving preferences to SMB...");
if (!silent)
ShowAction ((char*) "Saving preferences to SMB...");
datasize = preparePrefsData ();

View File

@ -229,7 +229,7 @@ unsigned int wmpadmap[] = { WPAD_BUTTON_B, WPAD_BUTTON_2,
};
/*** Classic Controller Padmap ***/
unsigned int ccpadmap[] = { WPAD_CLASSIC_BUTTON_A, WPAD_CLASSIC_BUTTON_B,
WPAD_CLASSIC_BUTTON_Y, WPAD_CLASSIC_BUTTON_X,
WPAD_CLASSIC_BUTTON_X, WPAD_CLASSIC_BUTTON_Y,
WPAD_CLASSIC_BUTTON_FULL_L, WPAD_CLASSIC_BUTTON_FULL_R,
WPAD_CLASSIC_BUTTON_MINUS, WPAD_CLASSIC_BUTTON_PLUS,
WPAD_CLASSIC_BUTTON_UP, WPAD_CLASSIC_BUTTON_DOWN,
@ -399,7 +399,34 @@ decodepad (int pad)
}
}
/****************************************************************************
* setFrameTimerMethod()
* change frametimer method depending on whether ROM is NTSC or PAL
****************************************************************************/
extern u8 vmode_60hz;
int timerstyle;
void setFrameTimerMethod()
{
/*
Set frametimer method
(timerstyle: 0=NTSC vblank, 1=PAL int timer)
*/
if ( Settings.PAL ) {
if(vmode_60hz == 1)
timerstyle = 1;
else
timerstyle = 0;
//timediffallowed = Settings.FrameTimePAL;
} else {
if(vmode_60hz == 1)
timerstyle = 0;
else
timerstyle = 1;
//timediffallowed = Settings.FrameTimeNTSC;
}
return;
}
/****************************************************************************
* NGCReportButtons
* Called on each rendered frame
@ -445,7 +472,7 @@ NGCReportButtons ()
if ( GCSettings.AutoSave == 1 )
{
if ( WaitPromptChoice ((char*)"Save SRAM?", (char*)"Don't Save", (char*)"Save") )
//if ( WaitPromptChoice ((char*)"Save SRAM?", (char*)"Don't Save", (char*)"Save") )
quickSaveSRAM ( SILENT );
}
else if ( GCSettings.AutoSave == 2 )
@ -465,6 +492,11 @@ NGCReportButtons ()
mainmenu ();
FrameTimer = 0;
ConfigRequested = 0;
setFrameTimerMethod(); // set frametimer method every time a ROM is loaded
// auto load freeze/sram?
}
else
{
@ -486,7 +518,7 @@ u32 wpad_get_analogues(int pad, float* mag, u16* ang)
u32 exp_type = 0;
#ifdef HW_RVL
struct expansion_t exp;
memset( &exp, 0, sizeof(exp) ); // FIX: necessary? we only look at the struct if an expansion is connected...
memset( &exp, 0, sizeof(exp) );
if ( WPAD_Probe( pad, &exp_type) == 0) // check wiimote and expansion status (first if wiimote is connected & no errors)
{
@ -597,8 +629,6 @@ SetDefaultButtonMap ()
****************************************************************************/
/* Eke-Eke: initialize frame Sync */
extern void S9xInitSync();
extern u8 vmode_60hz;
int timerstyle;
void
emulate ()
@ -608,23 +638,7 @@ emulate ()
AudioStart ();
S9xInitSync();
/*
Set frametimer method
(timerstyle: 0=NTSC vblank, 1=PAL int timer)
*/
if ( Settings.PAL ) {
if(vmode_60hz == 1)
timerstyle = 1;
else
timerstyle = 0;
//timediffallowed = Settings.FrameTimePAL;
} else {
if(vmode_60hz == 1)
timerstyle = 0;
else
timerstyle = 1;
//timediffallowed = Settings.FrameTimeNTSC;
}
setFrameTimerMethod(); // also called in NGCReportButtons()
while (1)
{

View File

@ -160,8 +160,8 @@
#include "snes9x.h"
// FIX: these are unused, but could be... must also change "freezecomment", PREFSVERSTRING, and "sramcomment"
#define GCVERSION "002"
#define GCVERSIONSTRING "Snes9x 1.5 v002"
//#define GCVERSION "002"
//#define GCVERSIONSTRING "Snes9x 1.5 v002"
#define NOTSILENT 0
#define SILENT 1
@ -204,7 +204,7 @@ END_EXTERN_C
3 SD card in slot B
4 SMB share ***/
#ifndef QUICK_SAVE_SLOT
#define QUICK_SAVE_SLOT 1
#define QUICK_SAVE_SLOT 2 // save to SD
#endif
/*** default SMB settings ***/

View File

@ -28,7 +28,7 @@ extern int padcal;
extern unsigned short gcpadmap[];
//extern unsigned short padmap[4];
char sramcomment[2][32] = { {"Snes9x GX 2.0.1b8 SRAM"}, {"Savegame"} };
char sramcomment[2][32] = { {"Snes9x GX 003 SRAM"}, {"Savegame"} };
/****************************************************************************
* Prepare Memory Card SRAM Save Data
@ -140,7 +140,7 @@ decodesavedata (int readsize)
// Check for exportable format sram - it has the sram comment at the start
memcpy (sramcomment, savebuffer, 32);
if ( strncmp (sramcomment, "Snes9x GX 2.0", 13) == 0 )
if ( (strncmp (sramcomment, "Snes9x GX 2.0", 13) == 0) || (strncmp (sramcomment, "Snes9x GX 00", 12) == 0) ) // version 2.0.XX or 00x
{
offset = 64;
@ -243,7 +243,7 @@ void quickLoadSRAM (bool8 silent)
break;
case CARD_SLOTA+2:
case CARD_SLOTB+2:
LoadSRAMFromSD(QUICK_SAVE_SLOT-2, silent);
LoadSRAMFromSD(silent);
break;
case CARD_SLOTA+4:
LoadSRAMFromSMB(SILENT);
@ -261,7 +261,7 @@ void quickSaveSRAM (bool8 silent)
break;
case CARD_SLOTA+2:
case CARD_SLOTB+2:
SaveSRAMToSD(QUICK_SAVE_SLOT-2, silent);
SaveSRAMToSD(silent);
break;
case CARD_SLOTA+4:
SaveSRAMToSMB(SILENT);

184
source/ngc/unzip.cpp Normal file
View File

@ -0,0 +1,184 @@
/****************************************************************************
* Snes9x 1.50
*
* Nintendo Gamecube Unzip - borrowed from the GPP
*
* softdev July 2006
****************************************************************************/
#include <gccore.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <zlib.h>
#include "dvd.h"
#include "video.h"
#include "ftfont.h"
#include "unzip.h"
/*
* PKWare Zip Header - adopted into zip standard
*/
#define PKZIPID 0x504b0304
#define MAXROM 0x500000
#define ZIPCHUNK 2048
/*
* Zip files are stored little endian
* Support functions for short and int types
*/
u32
FLIP32 (u32 b)
{
unsigned int c;
c = (b & 0xff000000) >> 24;
c |= (b & 0xff0000) >> 8;
c |= (b & 0xff00) << 8;
c |= (b & 0xff) << 24;
return c;
}
u16
FLIP16 (u16 b)
{
u16 c;
c = (b & 0xff00) >> 8;
c |= (b & 0xff) << 8;
return c;
}
/****************************************************************************
* IsZipFile
*
* Returns TRUE when PKZIPID is first four characters of buffer
****************************************************************************/
int
IsZipFile (char *buffer)
{
unsigned int *check;
check = (unsigned int *) buffer;
if (check[0] == PKZIPID)
return 1;
return 0;
}
/*****************************************************************************
* unzip
*
* It should be noted that there is a limit of 5MB total size for any ROM
******************************************************************************/
int
UnZipBuffer (unsigned char *outbuffer, u64 discoffset, short where, FILE* filehandle)
{
PKZIPHEADER pkzip;
int zipoffset = 0;
int zipchunk = 0;
char out[ZIPCHUNK];
z_stream zs;
int res;
int bufferoffset = 0;
int have = 0;
char readbuffer[2048];
char msg[128];
/*** Read Zip Header ***/
switch (where) {
case 0: // SD Card
fseek(filehandle, 0, SEEK_SET);
fread (readbuffer, 1, 2048, filehandle); break;
case 1: // DVD
dvd_read (readbuffer, 2048, discoffset); break;
}
/*** Copy PKZip header to local, used as info ***/
memcpy (&pkzip, readbuffer, sizeof (PKZIPHEADER));
pkzip.uncompressedSize = FLIP32 (pkzip.uncompressedSize);
sprintf (msg, "Unzipping %d bytes ... Wait",
pkzip.uncompressedSize);
ShowAction (msg);
/*** Prepare the zip stream ***/
memset (&zs, 0, sizeof (z_stream));
zs.zalloc = Z_NULL;
zs.zfree = Z_NULL;
zs.opaque = Z_NULL;
zs.avail_in = 0;
zs.next_in = Z_NULL;
res = inflateInit2 (&zs, -MAX_WBITS);
if (res != Z_OK)
return 0;
/*** Set ZipChunk for first pass ***/
zipoffset =
(sizeof (PKZIPHEADER) + FLIP16 (pkzip.filenameLength) +
FLIP16 (pkzip.extraDataLength));
zipchunk = ZIPCHUNK - zipoffset;
/*** Now do it! ***/
do
{
zs.avail_in = zipchunk;
zs.next_in = (Bytef *) & readbuffer[zipoffset];
/*** Now inflate until input buffer is exhausted ***/
do
{
zs.avail_out = ZIPCHUNK;
zs.next_out = (Bytef *) & out;
res = inflate (&zs, Z_NO_FLUSH);
if (res == Z_MEM_ERROR)
{
inflateEnd (&zs);
return 0;
}
have = ZIPCHUNK - zs.avail_out;
if (have)
{
/*** Copy to normal block buffer ***/
memcpy (&outbuffer[bufferoffset], &out, have);
bufferoffset += have;
}
}
while (zs.avail_out == 0);
/*** Readup the next 2k block ***/
zipoffset = 0;
zipchunk = ZIPCHUNK;
switch (where) {
case 0: // SD Card
fread (readbuffer, 1, 2048, filehandle); break;
case 1: // DVD
discoffset += 2048;
dvd_read (readbuffer, 2048, discoffset); break;
}
}
while (res != Z_STREAM_END);
inflateEnd (&zs);
if (res == Z_STREAM_END)
{
if (pkzip.uncompressedSize == (u32) bufferoffset)
return bufferoffset;
else
return pkzip.uncompressedSize;
}
return 0;
}

35
source/ngc/unzip.h Normal file
View File

@ -0,0 +1,35 @@
/****************************************************************************
* Snes9x 1.50
*
* Nintendo Gamecube Unzip - borrowed from the GPP
*
* softdev July 2006
****************************************************************************/
#ifndef _UNZIP_
#define _UNZIP_
extern int IsZipFile (char *buffer);
int UnZipBuffer (unsigned char *outbuffer, u64 discoffset, short where, FILE* filehandle);
/*
* Zip file header definition
*/
typedef struct
{
unsigned int zipid __attribute__ ((__packed__)); // 0x04034b50
unsigned short zipversion __attribute__ ((__packed__));
unsigned short zipflags __attribute__ ((__packed__));
unsigned short compressionMethod __attribute__ ((__packed__));
unsigned short lastmodtime __attribute__ ((__packed__));
unsigned short lastmoddate __attribute__ ((__packed__));
unsigned int crc32 __attribute__ ((__packed__));
unsigned int compressedSize __attribute__ ((__packed__));
unsigned int uncompressedSize __attribute__ ((__packed__));
unsigned short filenameLength __attribute__ ((__packed__));
unsigned short extraDataLength __attribute__ ((__packed__));
}
PKZIPHEADER;
u32 FLIP32 (u32 b);
u16 FLIP16 (u16 b);
#endif

View File

@ -392,10 +392,10 @@ clearscreen (int colour)
VIDEO_ClearFrameBuffer (vmode, xfb[whichfb], colour);
#ifdef HW_RVL
// on wii copy from memory
//memcpy ((char *) xfb[whichfb], (char *) backdrop, 640 * screenheight * 2);
memcpy ((char *) xfb[whichfb], (char *) backdrop, 640 * screenheight * 2);
#else
// on gc copy from aram
//ARAMFetch ((char *) xfb[whichfb], (char *) AR_BACKDROP, 640 * screenheight * 2); // FIX
ARAMFetch ((char *) xfb[whichfb], (char *) AR_BACKDROP, 640 * screenheight * 2); // FIX
#endif
}