mirror of
https://github.com/ekeeke/Genesis-Plus-GX.git
synced 2025-01-12 11:19:07 +01:00
rewrote file interface
This commit is contained in:
parent
6a9974c865
commit
8ea80d38a5
@ -25,8 +25,9 @@ Genesis Plus for Gamecube
|
|||||||
- rewrote video engine: improved horizontal scaling (VI+GX), improved rendering speed (direct texture mapping)
|
- rewrote video engine: improved horizontal scaling (VI+GX), improved rendering speed (direct texture mapping)
|
||||||
- removed embedded font, (re)enabled IPL font support: now should works for Qoob users too (thanks to emukiddid)
|
- removed embedded font, (re)enabled IPL font support: now should works for Qoob users too (thanks to emukiddid)
|
||||||
- fixed "Reset" button behavior, now acts more like Genesis Reset button ;-)
|
- fixed "Reset" button behavior, now acts more like Genesis Reset button ;-)
|
||||||
- minor bugfixes and menu tweaks
|
- patched libfat for faster SDCARD accesses (thanks to svpe)
|
||||||
- compiled with libogc 1.7.0
|
- various bugfixes and menu tweaks
|
||||||
|
|
||||||
|
|
||||||
[NGC only]
|
[NGC only]
|
||||||
- added 480p support in menu
|
- added 480p support in menu
|
||||||
@ -34,7 +35,8 @@ Genesis Plus for Gamecube
|
|||||||
[Wii only]
|
[Wii only]
|
||||||
- implemented fast scrolling in menu using Wiimote D-PAD
|
- implemented fast scrolling in menu using Wiimote D-PAD
|
||||||
- added "Power" button support
|
- added "Power" button support
|
||||||
- libogc 1.7.0 features (SDHC support , Wiimote shutdown button support)
|
- added USB Storage support
|
||||||
|
- *new* libogc 1.7.0 features: SDHC support, Wiimote shutdown button support
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -55,7 +55,7 @@ patent must be licensed for everyone's free use or not licensed at all.
|
|||||||
|
|
||||||
The precise terms and conditions for copying, distribution and
|
The precise terms and conditions for copying, distribution and
|
||||||
modification follow.
|
modification follow.
|
||||||
|
|
||||||
GNU GENERAL PUBLIC LICENSE
|
GNU GENERAL PUBLIC LICENSE
|
||||||
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
||||||
|
|
||||||
@ -110,7 +110,7 @@ above, provided that you also meet all of these conditions:
|
|||||||
License. (Exception: if the Program itself is interactive but
|
License. (Exception: if the Program itself is interactive but
|
||||||
does not normally print such an announcement, your work based on
|
does not normally print such an announcement, your work based on
|
||||||
the Program is not required to print an announcement.)
|
the Program is not required to print an announcement.)
|
||||||
|
|
||||||
These requirements apply to the modified work as a whole. If
|
These requirements apply to the modified work as a whole. If
|
||||||
identifiable sections of that work are not derived from the Program,
|
identifiable sections of that work are not derived from the Program,
|
||||||
and can be reasonably considered independent and separate works in
|
and can be reasonably considered independent and separate works in
|
||||||
@ -168,7 +168,7 @@ access to copy from a designated place, then offering equivalent
|
|||||||
access to copy the source code from the same place counts as
|
access to copy the source code from the same place counts as
|
||||||
distribution of the source code, even though third parties are not
|
distribution of the source code, even though third parties are not
|
||||||
compelled to copy the source along with the object code.
|
compelled to copy the source along with the object code.
|
||||||
|
|
||||||
4. You may not copy, modify, sublicense, or distribute the Program
|
4. You may not copy, modify, sublicense, or distribute the Program
|
||||||
except as expressly provided under this License. Any attempt
|
except as expressly provided under this License. Any attempt
|
||||||
otherwise to copy, modify, sublicense or distribute the Program is
|
otherwise to copy, modify, sublicense or distribute the Program is
|
||||||
@ -225,7 +225,7 @@ impose that choice.
|
|||||||
|
|
||||||
This section is intended to make thoroughly clear what is believed to
|
This section is intended to make thoroughly clear what is believed to
|
||||||
be a consequence of the rest of this License.
|
be a consequence of the rest of this License.
|
||||||
|
|
||||||
8. If the distribution and/or use of the Program is restricted in
|
8. If the distribution and/or use of the Program is restricted in
|
||||||
certain countries either by patents or by copyrighted interfaces, the
|
certain countries either by patents or by copyrighted interfaces, the
|
||||||
original copyright holder who places the Program under this License
|
original copyright holder who places the Program under this License
|
||||||
@ -278,7 +278,7 @@ PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
|
|||||||
POSSIBILITY OF SUCH DAMAGES.
|
POSSIBILITY OF SUCH DAMAGES.
|
||||||
|
|
||||||
END OF TERMS AND CONDITIONS
|
END OF TERMS AND CONDITIONS
|
||||||
|
|
||||||
How to Apply These Terms to Your New Programs
|
How to Apply These Terms to Your New Programs
|
||||||
|
|
||||||
If you develop a new program, and you want it to be of the greatest
|
If you develop a new program, and you want it to be of the greatest
|
||||||
|
@ -59,8 +59,9 @@ uint8 hc_320[210] = {
|
|||||||
0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9A, 0x9B, 0x9C, 0x9D, 0x9E, 0x9F,
|
0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9A, 0x9B, 0x9C, 0x9D, 0x9E, 0x9F,
|
||||||
0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, 0xA8, 0xA9, 0xAA, 0xAB, 0xAC, 0xAD, 0xAE, 0xAF,
|
0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, 0xA8, 0xA9, 0xAA, 0xAB, 0xAC, 0xAD, 0xAE, 0xAF,
|
||||||
0xB0, 0xB1, 0xB2, 0xB3, 0xB4, 0xB5, 0xB6,
|
0xB0, 0xB1, 0xB2, 0xB3, 0xB4, 0xB5, 0xB6,
|
||||||
0xE5, 0xE6, 0xE7, 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF,
|
0xE5, 0xE6, 0xE7, 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED,
|
||||||
0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, 0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0xFF
|
0xEE, 0xEF, 0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, 0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0xFD,
|
||||||
|
0xFE, 0xFF
|
||||||
};
|
};
|
||||||
|
|
||||||
static inline void lightgun_reset(int num)
|
static inline void lightgun_reset(int num)
|
||||||
|
@ -32,8 +32,8 @@ uint8 region_code = REGION_USA;
|
|||||||
*****************************************************************************/
|
*****************************************************************************/
|
||||||
struct port_t
|
struct port_t
|
||||||
{
|
{
|
||||||
void (*data_w)(unsigned int data);
|
void (*data_w)(uint32 data);
|
||||||
unsigned int (*data_r)(void);
|
uint32 (*data_r)(void);
|
||||||
} port[3];
|
} port[3];
|
||||||
|
|
||||||
void io_reset(void)
|
void io_reset(void)
|
||||||
@ -127,7 +127,7 @@ void io_reset(void)
|
|||||||
input_reset();
|
input_reset();
|
||||||
}
|
}
|
||||||
|
|
||||||
void io_write(unsigned int offset, unsigned int value)
|
void io_write(uint32 offset, uint32 value)
|
||||||
{
|
{
|
||||||
switch (offset)
|
switch (offset)
|
||||||
{
|
{
|
||||||
@ -173,7 +173,7 @@ void io_write(unsigned int offset, unsigned int value)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned int io_read(unsigned int offset)
|
uint32 io_read(uint32 offset)
|
||||||
{
|
{
|
||||||
switch(offset)
|
switch(offset)
|
||||||
{
|
{
|
||||||
|
@ -24,10 +24,10 @@
|
|||||||
#ifndef _GEN_IO_H_
|
#ifndef _GEN_IO_H_
|
||||||
#define _GEN_IO_H_
|
#define _GEN_IO_H_
|
||||||
|
|
||||||
#define REGION_USA 0x80
|
|
||||||
#define REGION_JAPAN_NTSC 0x00
|
#define REGION_JAPAN_NTSC 0x00
|
||||||
#define REGION_EUROPE 0xC0
|
|
||||||
#define REGION_JAPAN_PAL 0x40
|
#define REGION_JAPAN_PAL 0x40
|
||||||
|
#define REGION_USA 0x80
|
||||||
|
#define REGION_EUROPE 0xC0
|
||||||
|
|
||||||
/* Global variables */
|
/* Global variables */
|
||||||
extern uint8 io_reg[0x10];
|
extern uint8 io_reg[0x10];
|
||||||
@ -36,8 +36,8 @@ extern uint8 pad_type;
|
|||||||
|
|
||||||
/* Function prototypes */
|
/* Function prototypes */
|
||||||
extern void io_reset(void);
|
extern void io_reset(void);
|
||||||
extern void io_write(unsigned int offset, unsigned int value);
|
extern void io_write(uint32 offset, uint32 value);
|
||||||
extern unsigned int io_read(unsigned int offset);
|
extern uint32 io_read(uint32 offset);
|
||||||
|
|
||||||
#endif /* _IO_H_ */
|
#endif /* _IO_H_ */
|
||||||
|
|
||||||
|
@ -23,8 +23,8 @@
|
|||||||
|
|
||||||
#include "shared.h"
|
#include "shared.h"
|
||||||
|
|
||||||
uint8 *cart_rom; /* cart_rom NEED to be previously dynamically allocated */
|
uint8 *cart_rom; /* CART rom */
|
||||||
uint8 bios_rom[0x10000];
|
uint8 bios_rom[0x10000]; /* BIOS rom */
|
||||||
uint8 work_ram[0x10000]; /* 68K work RAM */
|
uint8 work_ram[0x10000]; /* 68K work RAM */
|
||||||
uint8 zram[0x2000]; /* Z80 work RAM */
|
uint8 zram[0x2000]; /* Z80 work RAM */
|
||||||
uint8 zbusreq; /* /BUSREQ from Z80 */
|
uint8 zbusreq; /* /BUSREQ from Z80 */
|
||||||
@ -36,7 +36,6 @@ uint8 gen_running;
|
|||||||
uint32 genromsize;
|
uint32 genromsize;
|
||||||
int32 resetline;
|
int32 resetline;
|
||||||
|
|
||||||
|
|
||||||
/*--------------------------------------------------------------------------*/
|
/*--------------------------------------------------------------------------*/
|
||||||
/* Init, reset, shutdown functions */
|
/* Init, reset, shutdown functions */
|
||||||
/*--------------------------------------------------------------------------*/
|
/*--------------------------------------------------------------------------*/
|
||||||
@ -173,7 +172,6 @@ void gen_reset (uint32 hard_reset)
|
|||||||
/* register SOFTRESET */
|
/* register SOFTRESET */
|
||||||
SYS_SetResetCallback(set_softreset);
|
SYS_SetResetCallback(set_softreset);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void gen_shutdown (void)
|
void gen_shutdown (void)
|
||||||
|
@ -372,9 +372,9 @@ uint8 cycle2hc32[488] = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
uint8 cycle2hc40[488] = {
|
uint8 cycle2hc40[488] = {
|
||||||
0xA4, 0xA5, 0xA5, 0xA6, 0xA6, 0xA7, 0xA7, 0xA7, 0xA8, 0xA8, 0xA9, 0xA9, 0xAA, 0xAA,
|
0xA4, 0xA5, 0xA5, 0xA6, 0xA6, 0xA7, 0xA7, 0xA7, 0xA8, 0xA8, 0xA9, 0xA9, 0xAA, 0xAA, 0xAA, 0xAB,
|
||||||
0xAA, 0xAB, 0xAB, 0xAC, 0xAC, 0xAD, 0xAD, 0xAD, 0xAE, 0xAE, 0xAF, 0xAF, 0xB0, 0xB0, 0xB1, 0xB1,
|
0xAB, 0xAC, 0xAC, 0xAD, 0xAD, 0xAD, 0xAE, 0xAE, 0xAF, 0xAF, 0xB0, 0xB0, 0xB1, 0xB1, 0xB1, 0xB2,
|
||||||
0xB1, 0xB2, 0xB2, 0xB3, 0xB3, 0xB4, 0xB4, 0xB4, 0xB5, 0xB5, 0xB6, 0xB6,
|
0xB2, 0xB3, 0xB3, 0xB4, 0xB4, 0xB4, 0xB5, 0xB5, 0xB6, 0xB6,
|
||||||
0xE4, 0xE4, 0xE4, 0xE5, 0xE5, 0xE6, 0xE6,
|
0xE4, 0xE4, 0xE4, 0xE5, 0xE5, 0xE6, 0xE6,
|
||||||
0xE7, 0xE7, 0xE7, 0xE8, 0xE8, 0xE9, 0xE9, 0xEA, 0xEA, 0xEB, 0xEB, 0xEB, 0xEC, 0xEC, 0xED, 0xED,
|
0xE7, 0xE7, 0xE7, 0xE8, 0xE8, 0xE9, 0xE9, 0xEA, 0xEA, 0xEB, 0xEB, 0xEB, 0xEC, 0xEC, 0xED, 0xED,
|
||||||
0xEE, 0xEE, 0xEE, 0xEF, 0xEF, 0xF0, 0xF0, 0xF1, 0xF1, 0xF1, 0xF2, 0xF2, 0xF3, 0xF3, 0xF4, 0xF4,
|
0xEE, 0xEE, 0xEE, 0xEF, 0xEF, 0xF0, 0xF0, 0xF1, 0xF1, 0xF1, 0xF2, 0xF2, 0xF3, 0xF3, 0xF4, 0xF4,
|
||||||
@ -406,7 +406,6 @@ uint8 cycle2hc40[488] = {
|
|||||||
0xA1, 0xA2, 0xA2, 0xA3, 0xA3, 0xA4, 0xA4,
|
0xA1, 0xA2, 0xA2, 0xA3, 0xA3, 0xA4, 0xA4,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
uint8 *vctab;
|
uint8 *vctab;
|
||||||
uint8 *hctab;
|
uint8 *hctab;
|
||||||
|
|
||||||
|
@ -66,7 +66,7 @@ ROMINFO rominfo;
|
|||||||
*
|
*
|
||||||
* Based on the document provided at
|
* Based on the document provided at
|
||||||
* http://www.zophar.net/tech/files/Genesis_ROM_Format.txt
|
* http://www.zophar.net/tech/files/Genesis_ROM_Format.txt
|
||||||
***************************************************************************/
|
**************************************************************************/
|
||||||
COMPANYINFO companyinfo[MAXCOMPANY] = {
|
COMPANYINFO companyinfo[MAXCOMPANY] = {
|
||||||
{"ACLD", "Ballistic"},
|
{"ACLD", "Ballistic"},
|
||||||
{"RSI", "Razorsoft"},
|
{"RSI", "Razorsoft"},
|
||||||
|
@ -35,14 +35,14 @@ typedef struct
|
|||||||
char product[14]; /* Product serial number */
|
char product[14]; /* Product serial number */
|
||||||
unsigned short checksum; /* Checksum */
|
unsigned short checksum; /* Checksum */
|
||||||
char io_support[18]; /* Actually 16 chars :) */
|
char io_support[18]; /* Actually 16 chars :) */
|
||||||
unsigned int romstart;
|
unsigned int romstart; /* ROM start address */
|
||||||
unsigned int romend;
|
unsigned int romend; /* ROM end address */
|
||||||
char RAMInfo[14];
|
char RAMInfo[14]; /* Backup RAM header */
|
||||||
unsigned int ramstart;
|
unsigned int ramstart; /* RAM start address */
|
||||||
unsigned int ramend;
|
unsigned int ramend; /* RAM end address */
|
||||||
char modem[14];
|
char modem[14]; /* Sega Modem support */
|
||||||
char memo[50];
|
char memo[50]; /* Misc */
|
||||||
char country[18];
|
char country[18]; /* Country flag */
|
||||||
} ROMINFO;
|
} ROMINFO;
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
|
@ -4,16 +4,19 @@
|
|||||||
#ifdef LSB_FIRST
|
#ifdef LSB_FIRST
|
||||||
|
|
||||||
#define READ_BYTE(BASE, ADDR) (BASE)[(ADDR)^1]
|
#define READ_BYTE(BASE, ADDR) (BASE)[(ADDR)^1]
|
||||||
#define READ_WORD(BASE, ADDR) (((BASE)[ADDR]<<8) | \
|
|
||||||
(BASE)[(ADDR)+1])
|
#define READ_WORD(BASE, ADDR) (((BASE)[ADDR]<<8) | (BASE)[(ADDR)+1])
|
||||||
|
|
||||||
#define READ_WORD_LONG(BASE, ADDR) (((BASE)[ADDR]<<24) | \
|
#define READ_WORD_LONG(BASE, ADDR) (((BASE)[ADDR]<<24) | \
|
||||||
((BASE)[(ADDR)+1]<<16) | \
|
((BASE)[(ADDR)+1]<<16) | \
|
||||||
((BASE)[(ADDR)+2]<<8) | \
|
((BASE)[(ADDR)+2]<<8) | \
|
||||||
(BASE)[(ADDR)+3])
|
(BASE)[(ADDR)+3])
|
||||||
|
|
||||||
#define WRITE_BYTE(BASE, ADDR, VAL) (BASE)[(ADDR)^1] = (VAL)&0xff
|
#define WRITE_BYTE(BASE, ADDR, VAL) (BASE)[(ADDR)^1] = (VAL)&0xff
|
||||||
|
|
||||||
#define WRITE_WORD(BASE, ADDR, VAL) (BASE)[ADDR] = ((VAL)>>8) & 0xff; \
|
#define WRITE_WORD(BASE, ADDR, VAL) (BASE)[ADDR] = ((VAL)>>8) & 0xff; \
|
||||||
(BASE)[(ADDR)+1] = (VAL)&0xff
|
(BASE)[(ADDR)+1] = (VAL)&0xff
|
||||||
|
|
||||||
#define WRITE_WORD_LONG(BASE, ADDR, VAL) (BASE)[(ADDR] = ((VAL)>>24) & 0xff; \
|
#define WRITE_WORD_LONG(BASE, ADDR, VAL) (BASE)[(ADDR] = ((VAL)>>24) & 0xff; \
|
||||||
(BASE)[(ADDR)+1] = ((VAL)>>16)&0xff; \
|
(BASE)[(ADDR)+1] = ((VAL)>>16)&0xff; \
|
||||||
(BASE)[(ADDR)+2] = ((VAL)>>8)&0xff; \
|
(BASE)[(ADDR)+2] = ((VAL)>>8)&0xff; \
|
||||||
|
@ -202,7 +202,7 @@ void cpu_writemem16(unsigned int address, unsigned int data)
|
|||||||
Port handlers. Ports are unused when not in Mark III compatability mode.
|
Port handlers. Ports are unused when not in Mark III compatability mode.
|
||||||
|
|
||||||
Games that access ports anyway:
|
Games that access ports anyway:
|
||||||
- Thunder Force IV reads port $BF in it's interrupt handler.
|
Thunder Force IV reads port $BF in it's interrupt handler.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
unsigned int cpu_readport16(unsigned int port)
|
unsigned int cpu_readport16(unsigned int port)
|
||||||
|
@ -12,15 +12,19 @@
|
|||||||
|
|
||||||
void config_save()
|
void config_save()
|
||||||
{
|
{
|
||||||
if (!use_FAT) return;
|
char pathname[MAXPATHLEN];
|
||||||
|
|
||||||
|
if (!fat_enabled) return;
|
||||||
|
|
||||||
/* first check if directory exist */
|
/* first check if directory exist */
|
||||||
DIR_ITER *dir = diropen("/genplus");
|
sprintf (pathname, DEFAULT_PATH);
|
||||||
if (dir == NULL) mkdir("/genplus",S_IRWXU);
|
DIR_ITER *dir = diropen(pathname);
|
||||||
|
if (dir == NULL) mkdir(pathname,S_IRWXU);
|
||||||
else dirclose(dir);
|
else dirclose(dir);
|
||||||
|
|
||||||
/* open configuration file */
|
/* open configuration file */
|
||||||
FILE *fp = fopen("/genplus/genplus.ini", "wb");
|
sprintf (pathname, "%s/config.ini", pathname);
|
||||||
|
FILE *fp = fopen(pathname, "wb");
|
||||||
if (fp == NULL) return;
|
if (fp == NULL) return;
|
||||||
|
|
||||||
/* save options */
|
/* save options */
|
||||||
@ -31,8 +35,11 @@ void config_save()
|
|||||||
|
|
||||||
void config_load()
|
void config_load()
|
||||||
{
|
{
|
||||||
|
char pathname[MAXPATHLEN];
|
||||||
|
|
||||||
/* open configuration file */
|
/* open configuration file */
|
||||||
FILE *fp = fopen("/genplus/genplus.ini", "rb");
|
sprintf (pathname, "%s/genplus.ini", DEFAULT_PATH);
|
||||||
|
FILE *fp = fopen(pathname, "rb");
|
||||||
if (fp == NULL) return;
|
if (fp == NULL) return;
|
||||||
|
|
||||||
/* read version */
|
/* read version */
|
||||||
@ -42,7 +49,7 @@ void config_load()
|
|||||||
if (strcmp(version,CONFIG_VERSION)) return;
|
if (strcmp(version,CONFIG_VERSION)) return;
|
||||||
|
|
||||||
/* read file */
|
/* read file */
|
||||||
fp = fopen("/genplus/genplus.ini", "rb");
|
fp = fopen(pathname, "rb");
|
||||||
fread(&config, sizeof(config), 1, fp);
|
fread(&config, sizeof(config), 1, fp);
|
||||||
fclose(fp);
|
fclose(fp);
|
||||||
}
|
}
|
||||||
|
@ -44,7 +44,7 @@ t_config config;
|
|||||||
extern void config_save();
|
extern void config_save();
|
||||||
extern void config_load();
|
extern void config_load();
|
||||||
extern void set_config_defaults(void);
|
extern void set_config_defaults(void);
|
||||||
extern bool use_FAT;
|
extern bool fat_enabled;
|
||||||
|
|
||||||
#endif /* _CONFIG_H_ */
|
#endif /* _CONFIG_H_ */
|
||||||
|
|
||||||
|
@ -1,28 +1,17 @@
|
|||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
* Nintendo Gamecube DVD Reading Library
|
* Nintendo Gamecube DVD Reading Library
|
||||||
*
|
*
|
||||||
* This is NOT a complete DVD library, in that it works for reading
|
* Low-Level DVD access
|
||||||
* ISO9660 discs only.
|
|
||||||
*
|
*
|
||||||
* If you need softmod drivecodes etc, look elsewhere.
|
|
||||||
* There are known issues with libogc dvd handling, so these work
|
|
||||||
* outside of it ,if you will.
|
|
||||||
*
|
|
||||||
* This is ideal for using with a gc-linux self booting DVD only.
|
|
||||||
* Go http://www.gc-linux.org for further information and the tools
|
|
||||||
* for your platform.
|
|
||||||
*
|
|
||||||
* To keep libOGC stable, make sure you call DVD_Init before using
|
|
||||||
* these functions.
|
|
||||||
***************************************************************************/
|
***************************************************************************/
|
||||||
#include "shared.h"
|
#include "shared.h"
|
||||||
|
|
||||||
#ifdef HW_RVL
|
#ifdef HW_RVL
|
||||||
#include "di/di.h"
|
#include "di/di.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
#ifndef HW_RVL
|
#ifndef HW_RVL
|
||||||
static u64 DvdMaxOffset = 0x57057C00; /* 1.4 GB max. */
|
static u64 DvdMaxOffset = 0x57057C00; /* 1.4 GB max. by default */
|
||||||
static vu32* const dvd = (u32*)0xCC006000; /* DVD I/O Address base */
|
static vu32* const dvd = (u32*)0xCC006000; /* DVD I/O Address base */
|
||||||
static u8 *inquiry=(unsigned char *)0x80000004; /* pointer to drive ID */
|
static u8 *inquiry=(unsigned char *)0x80000004; /* pointer to drive ID */
|
||||||
#else
|
#else
|
||||||
@ -32,7 +21,6 @@ static u64 DvdMaxOffset = 0x118244F00LL; /* 4.7 GB max. */
|
|||||||
static u8 DVDreadbuffer[2048] ATTRIBUTE_ALIGN (32); /* data buffer for all DVD operations */
|
static u8 DVDreadbuffer[2048] ATTRIBUTE_ALIGN (32); /* data buffer for all DVD operations */
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/***************************************************************************
|
/***************************************************************************
|
||||||
* dvd_read
|
* dvd_read
|
||||||
*
|
*
|
19
source/ngc/dvd.h
Normal file
19
source/ngc/dvd.h
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
/****************************************************************************
|
||||||
|
* Nintendo Gamecube DVD Reading Library
|
||||||
|
*
|
||||||
|
* Low-Level DVD access
|
||||||
|
*
|
||||||
|
***************************************************************************/
|
||||||
|
|
||||||
|
#ifndef _DVD_H_
|
||||||
|
#define _DVD_H_
|
||||||
|
|
||||||
|
extern u32 dvd_read (void *dst, u32 len, u64 offset);
|
||||||
|
extern void dvd_motor_off ();
|
||||||
|
|
||||||
|
#ifndef HW_RVL
|
||||||
|
extern void uselessinquiry ();
|
||||||
|
extern void dvd_drive_detect();
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif
|
@ -9,8 +9,8 @@
|
|||||||
#include "dvd.h"
|
#include "dvd.h"
|
||||||
#include "font.h"
|
#include "font.h"
|
||||||
#include "unzip.h"
|
#include "unzip.h"
|
||||||
#include <zlib.h>
|
|
||||||
|
|
||||||
|
#include <zlib.h>
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* PKWare Zip Header - adopted into zip standard
|
* PKWare Zip Header - adopted into zip standard
|
||||||
|
399
source/ngc/fileio_dvd.c
Normal file
399
source/ngc/fileio_dvd.c
Normal file
@ -0,0 +1,399 @@
|
|||||||
|
/****************************************************************************
|
||||||
|
*
|
||||||
|
* DVD ISO9660/Joliet loading support
|
||||||
|
*
|
||||||
|
***************************************************************************/
|
||||||
|
#include "shared.h"
|
||||||
|
#include "font.h"
|
||||||
|
#include "fileio_dvd.h"
|
||||||
|
#include "filesel.h"
|
||||||
|
#include "fileio.h"
|
||||||
|
#include "dvd.h"
|
||||||
|
|
||||||
|
#ifdef HW_RVL
|
||||||
|
#include "di/di.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/** Minimal ISO Directory Definition **/
|
||||||
|
#define RECLEN 0 /* Record length */
|
||||||
|
#define EXTENT 6 /* Extent */
|
||||||
|
#define FILE_LENGTH 14 /* File length (BIG ENDIAN) */
|
||||||
|
#define FILE_FLAGS 25 /* File flags */
|
||||||
|
#define FILENAME_LENGTH 32 /* Filename length */
|
||||||
|
#define FILENAME 33 /* ASCIIZ filename */
|
||||||
|
|
||||||
|
/** Minimal Primary Volume Descriptor **/
|
||||||
|
#define PVDROOT 0x9c
|
||||||
|
|
||||||
|
/** Static Variables **/
|
||||||
|
static u64 rootdir = 0; /* current root directory offset */
|
||||||
|
static u64 basedir = 0; /* base directory offset */
|
||||||
|
static int rootdirlength = 0; /* current root directory length */
|
||||||
|
static int IsJoliet = 0;
|
||||||
|
static int diroffset = 0;
|
||||||
|
static char dvdbuffer[2048];
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* Primary Volume Descriptor
|
||||||
|
*
|
||||||
|
* The PVD should reside between sector 16 and 31.
|
||||||
|
* This is for single session DVD only.
|
||||||
|
****************************************************************************/
|
||||||
|
static int getpvd ()
|
||||||
|
{
|
||||||
|
int sector = 16;
|
||||||
|
u32 rootdir32;
|
||||||
|
|
||||||
|
basedir = rootdirlength = 0;
|
||||||
|
IsJoliet = -1;
|
||||||
|
|
||||||
|
/** Look for Joliet PVD first **/
|
||||||
|
while (sector < 32)
|
||||||
|
{
|
||||||
|
if (dvd_read (&dvdbuffer, 2048, (u64)(sector << 11)))
|
||||||
|
{
|
||||||
|
if (memcmp (&dvdbuffer, "\2CD001\1", 8) == 0)
|
||||||
|
{
|
||||||
|
memcpy(&rootdir32, &dvdbuffer[PVDROOT + EXTENT], 4);
|
||||||
|
basedir = (u64)rootdir32;
|
||||||
|
memcpy (&rootdirlength, &dvdbuffer[PVDROOT + FILE_LENGTH], 4);
|
||||||
|
basedir <<= 11;
|
||||||
|
IsJoliet = 1;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else return 0; /*** Can't read sector! ***/
|
||||||
|
sector++;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (IsJoliet > 0) return 1; /*** Joliet PVD Found ? ***/
|
||||||
|
|
||||||
|
/*** Look for standard ISO9660 PVD ***/
|
||||||
|
sector = 16;
|
||||||
|
while (sector < 32)
|
||||||
|
{
|
||||||
|
if (dvd_read (&dvdbuffer, 2048, (u64)(sector << 11)))
|
||||||
|
{
|
||||||
|
if (memcmp (&dvdbuffer, "\1CD001\1", 8) == 0)
|
||||||
|
{
|
||||||
|
memcpy (&rootdir32, &dvdbuffer[PVDROOT + EXTENT], 4);
|
||||||
|
basedir = (u64)rootdir32;
|
||||||
|
memcpy (&rootdirlength, &dvdbuffer[PVDROOT + FILE_LENGTH], 4);
|
||||||
|
IsJoliet = 0;
|
||||||
|
basedir <<= 11;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else return 0; /*** Can't read sector! ***/
|
||||||
|
sector++;
|
||||||
|
}
|
||||||
|
|
||||||
|
return (IsJoliet == 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* getentry
|
||||||
|
*
|
||||||
|
* Support function to return the next file entry, if any
|
||||||
|
* Declared static to avoid accidental external entry.
|
||||||
|
****************************************************************************/
|
||||||
|
static int getentry (int entrycount)
|
||||||
|
{
|
||||||
|
char fname[512]; /* Huge, but experience has determined this */
|
||||||
|
char *ptr;
|
||||||
|
char *filename;
|
||||||
|
char *filenamelength;
|
||||||
|
char *rr;
|
||||||
|
int j;
|
||||||
|
u32 offset32;
|
||||||
|
|
||||||
|
/* Basic checks */
|
||||||
|
if (entrycount >= MAXFILES) return 0;
|
||||||
|
if (diroffset >= 2048) return 0;
|
||||||
|
|
||||||
|
/** Decode this entry **/
|
||||||
|
if (dvdbuffer[diroffset]) /* Record length available */
|
||||||
|
{
|
||||||
|
/* Update offsets into sector buffer */
|
||||||
|
ptr = (char *) &dvdbuffer[0];
|
||||||
|
ptr += diroffset;
|
||||||
|
filename = ptr + FILENAME;
|
||||||
|
filenamelength = ptr + FILENAME_LENGTH;
|
||||||
|
|
||||||
|
/* Check for wrap round - illegal in ISO spec,
|
||||||
|
* but certain crap writers do it! */
|
||||||
|
if ((diroffset + dvdbuffer[diroffset]) > 2048) return 0;
|
||||||
|
|
||||||
|
if (*filenamelength)
|
||||||
|
{
|
||||||
|
memset (&fname, 0, 512);
|
||||||
|
|
||||||
|
/*** Do ISO 9660 first ***/
|
||||||
|
if (!IsJoliet) strcpy (fname, filename);
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/*** The more tortuous unicode joliet entries ***/
|
||||||
|
for (j = 0; j < (*filenamelength >> 1); j++)
|
||||||
|
{
|
||||||
|
fname[j] = filename[j * 2 + 1];
|
||||||
|
}
|
||||||
|
|
||||||
|
fname[j] = 0;
|
||||||
|
|
||||||
|
if (strlen (fname) >= MAXJOLIET) fname[MAXJOLIET - 1] = 0;
|
||||||
|
if (strlen (fname) == 0) fname[0] = filename[0];
|
||||||
|
}
|
||||||
|
|
||||||
|
if (strlen (fname) == 0) strcpy (fname, ".");
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (fname[0] == 1) strcpy (fname, "..");
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* Move *filenamelength to t,
|
||||||
|
* Only to stop gcc warning for noobs :)
|
||||||
|
*/
|
||||||
|
int t = *filenamelength;
|
||||||
|
fname[t] = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Rockridge Check **/
|
||||||
|
rr = strstr (fname, ";");
|
||||||
|
if (rr != NULL) *rr = 0;
|
||||||
|
|
||||||
|
strcpy (filelist[entrycount].filename, fname);
|
||||||
|
memcpy (&offset32, &dvdbuffer[diroffset + EXTENT], 4);
|
||||||
|
filelist[entrycount].offset = (u64)offset32;
|
||||||
|
memcpy (&filelist[entrycount].length, &dvdbuffer[diroffset + FILE_LENGTH], 4);
|
||||||
|
memcpy (&filelist[entrycount].flags, &dvdbuffer[diroffset + FILE_FLAGS], 1);
|
||||||
|
|
||||||
|
filelist[entrycount].offset <<= 11;
|
||||||
|
filelist[entrycount].flags = filelist[entrycount].flags & 2;
|
||||||
|
filelist[entrycount].filename_offset = 0;
|
||||||
|
|
||||||
|
/*** Prepare for next entry ***/
|
||||||
|
diroffset += dvdbuffer[diroffset];
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/***************************************************************************
|
||||||
|
* DVD_UpdateRootDir
|
||||||
|
*
|
||||||
|
* Update DVD current root directory
|
||||||
|
***************************************************************************/
|
||||||
|
int DVD_UpdateDir(int go_up)
|
||||||
|
{
|
||||||
|
/* current directory doesn't change */
|
||||||
|
if (selection == 0) return 1;
|
||||||
|
|
||||||
|
/* root has no parent directory */
|
||||||
|
if (go_up && (basedir == rootdir)) return 0;
|
||||||
|
|
||||||
|
/* by default, update current directory */
|
||||||
|
rootdir = filelist[selection].offset;
|
||||||
|
rootdirlength = filelist[selection].length;
|
||||||
|
|
||||||
|
/* reinit selector (previous value is saved for one level) */
|
||||||
|
if (selection == 1)
|
||||||
|
{
|
||||||
|
selection = old_selection;
|
||||||
|
offset = old_offset;
|
||||||
|
old_selection = 0;
|
||||||
|
old_offset = 0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* save current selector value */
|
||||||
|
old_selection = selection;
|
||||||
|
old_offset = offset;
|
||||||
|
selection = 0;
|
||||||
|
offset = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* DVD_ParseDirectory
|
||||||
|
*
|
||||||
|
* This function will parse the directory tree.
|
||||||
|
* It relies on rootdir and rootdirlength being pre-populated by a call to
|
||||||
|
* getpvd, a previous parse or a menu selection.
|
||||||
|
*
|
||||||
|
* The return value is number of files collected, or 0 on failure.
|
||||||
|
****************************************************************************/
|
||||||
|
int DVD_ParseDirectory ()
|
||||||
|
{
|
||||||
|
int pdlength;
|
||||||
|
u64 pdoffset;
|
||||||
|
u64 rdoffset;
|
||||||
|
int len = 0;
|
||||||
|
int filecount = 0;
|
||||||
|
|
||||||
|
pdoffset = rdoffset = rootdir;
|
||||||
|
pdlength = rootdirlength;
|
||||||
|
filecount = 0;
|
||||||
|
|
||||||
|
/** Clear any existing values ***/
|
||||||
|
memset (&filelist, 0, sizeof (FILEENTRIES) * MAXFILES);
|
||||||
|
|
||||||
|
/*** Get as many files as possible ***/
|
||||||
|
while (len < pdlength)
|
||||||
|
{
|
||||||
|
if (dvd_read (&dvdbuffer, 2048, pdoffset) == 0) return 0;
|
||||||
|
|
||||||
|
diroffset = 0;
|
||||||
|
|
||||||
|
while (getentry (filecount))
|
||||||
|
{
|
||||||
|
if (filecount < MAXFILES) filecount++;
|
||||||
|
}
|
||||||
|
|
||||||
|
len += 2048;
|
||||||
|
pdoffset = rdoffset + len;
|
||||||
|
}
|
||||||
|
return filecount;
|
||||||
|
}
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* DVD_LoadFile
|
||||||
|
*
|
||||||
|
* This function will load a BIN, SMD or ZIP file from DVD into the ROM buffer.
|
||||||
|
* The index values indicates the file position in filentry list
|
||||||
|
* This functions return the actual size of data copied into the buffer
|
||||||
|
*
|
||||||
|
****************************************************************************/
|
||||||
|
int DVD_LoadFile (unsigned char *buffer)
|
||||||
|
{
|
||||||
|
/* file size */
|
||||||
|
int length = filelist[selection].length;
|
||||||
|
|
||||||
|
if (length > 0)
|
||||||
|
{
|
||||||
|
/* Read first data chunk */
|
||||||
|
char readbuffer[2048];
|
||||||
|
u64 discoffset = filelist[selection].offset;
|
||||||
|
dvd_read (&readbuffer, 2048, discoffset);
|
||||||
|
|
||||||
|
/* determine file type */
|
||||||
|
if (!IsZipFile ((char *) readbuffer))
|
||||||
|
{
|
||||||
|
/* How many 2k blocks to read */
|
||||||
|
int blocks = length / 2048;
|
||||||
|
int readoffset = 0;
|
||||||
|
int i;
|
||||||
|
|
||||||
|
/* read data chunks */
|
||||||
|
for (i = 0; i < blocks; i++)
|
||||||
|
{
|
||||||
|
dvd_read(readbuffer, 2048, discoffset);
|
||||||
|
discoffset += 2048;
|
||||||
|
memcpy (buffer + readoffset, readbuffer, 2048);
|
||||||
|
readoffset += 2048;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* final read */
|
||||||
|
i = length % 2048;
|
||||||
|
if (i)
|
||||||
|
{
|
||||||
|
dvd_read (readbuffer, 2048, discoffset);
|
||||||
|
memcpy (buffer + readoffset, readbuffer, i);
|
||||||
|
}
|
||||||
|
|
||||||
|
return length;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return UnZipDVD (buffer, discoffset, length);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* DVD_Open
|
||||||
|
*
|
||||||
|
* Function to load a DVD directory and display to user.
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
int DVD_Open ()
|
||||||
|
{
|
||||||
|
/* reset flags */
|
||||||
|
useFAT = 0;
|
||||||
|
|
||||||
|
/* is DVD mounted ? */
|
||||||
|
if (!getpvd())
|
||||||
|
{
|
||||||
|
/* mount DVD */
|
||||||
|
ShowAction("Mounting DVD ... Wait");
|
||||||
|
|
||||||
|
#ifdef HW_RVL
|
||||||
|
u32 val;
|
||||||
|
DI_GetCoverRegister(&val);
|
||||||
|
|
||||||
|
if(val & 0x1)
|
||||||
|
{
|
||||||
|
WaitPrompt("No Disc inserted !");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
DI_Mount();
|
||||||
|
while(DI_GetStatus() & DVD_INIT);
|
||||||
|
if (!(DI_GetStatus() & DVD_READY))
|
||||||
|
{
|
||||||
|
char msg[50];
|
||||||
|
sprintf(msg, "DI Status Error: 0x%08X\n",DI_GetStatus());
|
||||||
|
WaitPrompt(msg);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
DVD_Mount();
|
||||||
|
#endif
|
||||||
|
|
||||||
|
haveDVDdir = 0;
|
||||||
|
if (!getpvd())
|
||||||
|
{
|
||||||
|
WaitPrompt ("Failed to mount DVD");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (haveDVDdir == 0)
|
||||||
|
{
|
||||||
|
/* reset root directory */
|
||||||
|
rootdir = basedir;
|
||||||
|
|
||||||
|
/* parse root directory */
|
||||||
|
ShowAction("Reading Directory ...");
|
||||||
|
int max = DVD_ParseDirectory ();
|
||||||
|
if (max)
|
||||||
|
{
|
||||||
|
/* set DVD as default */
|
||||||
|
haveDVDdir = 1;
|
||||||
|
haveFATdir = 0;
|
||||||
|
|
||||||
|
/* reset File selector */
|
||||||
|
maxfiles = max;
|
||||||
|
offset = 0;
|
||||||
|
selection = 0;
|
||||||
|
old_offset = 0;
|
||||||
|
old_selection = 0;
|
||||||
|
return FileSelector ();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* no entries found */
|
||||||
|
WaitPrompt ("no files found !");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return FileSelector ();
|
||||||
|
}
|
14
source/ngc/fileio_dvd.h
Normal file
14
source/ngc/fileio_dvd.h
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
/****************************************************************************
|
||||||
|
*
|
||||||
|
* DVD ISO9660/Joliet loading support
|
||||||
|
*
|
||||||
|
***************************************************************************/
|
||||||
|
#ifndef _FILEIO_DVD_H
|
||||||
|
#define _FILEIO_DVD_H
|
||||||
|
|
||||||
|
extern int DVD_UpdateDir(int go_up);
|
||||||
|
extern int DVD_ParseDirectory();
|
||||||
|
extern int DVD_LoadFile(unsigned char* buffer);
|
||||||
|
extern int DVD_Open ();
|
||||||
|
|
||||||
|
#endif
|
313
source/ngc/fileio_fat.c
Normal file
313
source/ngc/fileio_fat.c
Normal file
@ -0,0 +1,313 @@
|
|||||||
|
/****************************************************************************
|
||||||
|
* FAT loading support
|
||||||
|
*
|
||||||
|
***************************************************************************/
|
||||||
|
#include "shared.h"
|
||||||
|
#include "font.h"
|
||||||
|
#include "fileio_fat.h"
|
||||||
|
#include "filesel.h"
|
||||||
|
#include "fileio.h"
|
||||||
|
#include "history.h"
|
||||||
|
|
||||||
|
/* current FAT directory */
|
||||||
|
static char fatdir[256];
|
||||||
|
|
||||||
|
/* current FAT device */
|
||||||
|
static int fat_type = 0;
|
||||||
|
static int useHistory = 0;
|
||||||
|
|
||||||
|
/***************************************************************************
|
||||||
|
* FAT_UpdateDir
|
||||||
|
*
|
||||||
|
* Update FAT current root directory
|
||||||
|
***************************************************************************/
|
||||||
|
int FAT_UpdateDir(int go_up)
|
||||||
|
{
|
||||||
|
int size=0;
|
||||||
|
char *test;
|
||||||
|
char temp[1024];
|
||||||
|
|
||||||
|
/* current directory doesn't change */
|
||||||
|
if (strcmp(filelist[selection].filename,".") == 0) return 1;
|
||||||
|
|
||||||
|
/* go up to parent directory */
|
||||||
|
if (strcmp(filelist[selection].filename,"..") == 0)
|
||||||
|
{
|
||||||
|
/* determine last subdirectory namelength */
|
||||||
|
sprintf(temp,"%s",fatdir);
|
||||||
|
test= strtok(temp,"/");
|
||||||
|
while (test != NULL)
|
||||||
|
{
|
||||||
|
size = strlen(test);
|
||||||
|
test = strtok(NULL,"/");
|
||||||
|
}
|
||||||
|
|
||||||
|
/* remove last subdirectory name */
|
||||||
|
size = strlen(fatdir) - size;
|
||||||
|
fatdir[size-1] = 0;
|
||||||
|
|
||||||
|
/* restore previous selector state */
|
||||||
|
selection = old_selection;
|
||||||
|
offset = old_offset;
|
||||||
|
|
||||||
|
/* reset old selection */
|
||||||
|
old_selection = 0;
|
||||||
|
old_offset = 0;
|
||||||
|
}
|
||||||
|
else if (go_up)
|
||||||
|
{
|
||||||
|
/* root has no parent directory */
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* by default, simply append folder name */
|
||||||
|
sprintf(fatdir, "%s%s/",fatdir, filelist[selection].filename);
|
||||||
|
|
||||||
|
/* save current selector state */
|
||||||
|
old_selection = selection;
|
||||||
|
old_offset = offset;
|
||||||
|
|
||||||
|
/* reset selection */
|
||||||
|
selection = 0;
|
||||||
|
offset = 0;
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/***************************************************************************
|
||||||
|
* FileSortCallback (Marty Disibio)
|
||||||
|
*
|
||||||
|
* 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);
|
||||||
|
}
|
||||||
|
|
||||||
|
/***************************************************************************
|
||||||
|
* FAT_ParseDirectory
|
||||||
|
*
|
||||||
|
* List files into one FAT directory
|
||||||
|
***************************************************************************/
|
||||||
|
int FAT_ParseDirectory()
|
||||||
|
{
|
||||||
|
int nbfiles = 0;
|
||||||
|
char filename[MAXPATHLEN];
|
||||||
|
struct stat filestat;
|
||||||
|
|
||||||
|
/* open directory */
|
||||||
|
DIR_ITER *dir = diropen (fatdir);
|
||||||
|
if (dir == NULL)
|
||||||
|
{
|
||||||
|
sprintf(filename, "Error opening %s", fatdir);
|
||||||
|
WaitPrompt (filename);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
while ((dirnext(dir, filename, &filestat) == 0) && (nbfiles < MAXFILES))
|
||||||
|
{
|
||||||
|
if (strcmp(filename,".") != 0)
|
||||||
|
{
|
||||||
|
memset(&filelist[nbfiles], 0, sizeof (FILEENTRIES));
|
||||||
|
sprintf(filelist[nbfiles].filename,"%s",filename);
|
||||||
|
filelist[nbfiles].length = filestat.st_size;
|
||||||
|
filelist[nbfiles].flags = (filestat.st_mode & S_IFDIR) ? 1 : 0;
|
||||||
|
nbfiles++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
dirclose(dir);
|
||||||
|
|
||||||
|
/* Sort the file list */
|
||||||
|
qsort(filelist, nbfiles, sizeof(FILEENTRIES), FileSortCallback);
|
||||||
|
|
||||||
|
return nbfiles;
|
||||||
|
}
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* FAT_LoadFile
|
||||||
|
*
|
||||||
|
* This function will load a BIN, SMD or ZIP file from DVD into the ROM buffer.
|
||||||
|
* This functions return the actual size of data copied into the buffer
|
||||||
|
*
|
||||||
|
****************************************************************************/
|
||||||
|
int FAT_LoadFile (unsigned char *buffer)
|
||||||
|
{
|
||||||
|
/* If loading from history then we need to setup a few more things. */
|
||||||
|
if(useHistory)
|
||||||
|
{
|
||||||
|
/* Get the parent folder for the file. */
|
||||||
|
strncpy(fatdir, history.entries[selection].filepath, MAXJOLIET-1);
|
||||||
|
fatdir[MAXJOLIET-1] = '\0';
|
||||||
|
|
||||||
|
/* Get the length of the file. This has to be done
|
||||||
|
* before calling LoadFile(). */
|
||||||
|
char filepath[MAXJOLIET];
|
||||||
|
struct stat filestat;
|
||||||
|
snprintf(filepath, MAXJOLIET-1, "%s%s", history.entries[selection].filepath, history.entries[selection].filename);
|
||||||
|
filepath[MAXJOLIET-1] = '\0';
|
||||||
|
if(stat(filepath, &filestat) == 0)
|
||||||
|
{
|
||||||
|
filelist[selection].length = filestat.st_size;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* file size */
|
||||||
|
int length = filelist[selection].length;
|
||||||
|
|
||||||
|
if (length > 0)
|
||||||
|
{
|
||||||
|
/* Add/move the file to the top of the history. */
|
||||||
|
history_add_file(fatdir, filelist[selection].filename);
|
||||||
|
|
||||||
|
/* full filename */
|
||||||
|
char fname[MAXPATHLEN];
|
||||||
|
sprintf(fname, "%s%s",fatdir,filelist[selection].filename);
|
||||||
|
|
||||||
|
/* open file */
|
||||||
|
FILE *sdfile = fopen(fname, "rb");
|
||||||
|
if (sdfile == NULL)
|
||||||
|
{
|
||||||
|
WaitPrompt ("Unable to open file!");
|
||||||
|
haveFATdir = 0;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Read first data chunk */
|
||||||
|
unsigned char temp[2048];
|
||||||
|
fread(temp, 1, 2048, sdfile);
|
||||||
|
fclose(sdfile);
|
||||||
|
|
||||||
|
/* determine file type */
|
||||||
|
if (!IsZipFile ((char *) temp))
|
||||||
|
{
|
||||||
|
/* re-open and read file */
|
||||||
|
sdfile = fopen(fname, "rb");
|
||||||
|
if (sdfile)
|
||||||
|
{
|
||||||
|
fread(buffer, 1, length, sdfile);
|
||||||
|
fclose(sdfile);
|
||||||
|
return length;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* unzip file */
|
||||||
|
return UnZipFAT(buffer, fname);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* OpenFAT
|
||||||
|
*
|
||||||
|
* Function to load a FAT directory and display to user.
|
||||||
|
****************************************************************************/
|
||||||
|
int FAT_Open(int type)
|
||||||
|
{
|
||||||
|
int max = 0;
|
||||||
|
char root[10] = "";
|
||||||
|
|
||||||
|
/* reset flags */
|
||||||
|
useFAT = 1;
|
||||||
|
useHistory = 0;
|
||||||
|
|
||||||
|
/* FAT header */
|
||||||
|
#ifdef HW_RVL
|
||||||
|
if (type == TYPE_SD) sprintf (root, "sd:");
|
||||||
|
else if (type == TYPE_USB) sprintf (root, "usb:");
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* if FAT device type changed, reload filelist */
|
||||||
|
if (fat_type != type)
|
||||||
|
{
|
||||||
|
haveFATdir = 0;
|
||||||
|
}
|
||||||
|
fat_type = type;
|
||||||
|
|
||||||
|
/* update filelist */
|
||||||
|
if (haveFATdir == 0)
|
||||||
|
{
|
||||||
|
if (type == TYPE_RECENT)
|
||||||
|
{
|
||||||
|
/* fetch history list */
|
||||||
|
useHistory = 1;
|
||||||
|
int i;
|
||||||
|
for(i=0; i < NUM_HISTORY_ENTRIES; i++)
|
||||||
|
{
|
||||||
|
if(history.entries[i].filepath[0] > 0)
|
||||||
|
{
|
||||||
|
filelist[i].offset = 0;
|
||||||
|
filelist[i].length = 0;
|
||||||
|
filelist[i].flags = 0;
|
||||||
|
filelist[i].filename_offset = 0;
|
||||||
|
strncpy(filelist[i].filename, history.entries[i].filename, MAXJOLIET-1);
|
||||||
|
filelist[i].filename[MAXJOLIET-1] = '\0';
|
||||||
|
max++;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* Found the end of the list. */
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* reset root directory */
|
||||||
|
sprintf (fatdir, "%s%s/roms", root, DEFAULT_PATH);
|
||||||
|
|
||||||
|
/* if directory doesn't exist, use root as default */
|
||||||
|
DIR_ITER *dir = diropen(fatdir);
|
||||||
|
if (dir == NULL) sprintf (fatdir, "%s/", root);
|
||||||
|
else dirclose(dir);
|
||||||
|
|
||||||
|
/* parse root directory */
|
||||||
|
ShowAction("Reading Directory ...");
|
||||||
|
max = FAT_ParseDirectory ();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (max)
|
||||||
|
{
|
||||||
|
/* FAT is default */
|
||||||
|
haveFATdir = 1;
|
||||||
|
haveDVDdir = 0;
|
||||||
|
|
||||||
|
/* reset file selection */
|
||||||
|
maxfiles = max;
|
||||||
|
offset = 0;
|
||||||
|
selection = 0;
|
||||||
|
old_offset = 0;
|
||||||
|
old_selection = 0;
|
||||||
|
return FileSelector ();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* no entries found */
|
||||||
|
WaitPrompt ("no files found !");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return FileSelector ();
|
||||||
|
}
|
21
source/ngc/fileio_fat.h
Normal file
21
source/ngc/fileio_fat.h
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
/****************************************************************************
|
||||||
|
*
|
||||||
|
* FAT loading support
|
||||||
|
*
|
||||||
|
***************************************************************************/
|
||||||
|
#ifndef _FILEIO_FAT_H
|
||||||
|
#define _FILEIO_FAT_H
|
||||||
|
|
||||||
|
#define TYPE_RECENT 0
|
||||||
|
#define TYPE_SD 1
|
||||||
|
|
||||||
|
#ifdef HW_RVL
|
||||||
|
#define TYPE_USB 2
|
||||||
|
#endif
|
||||||
|
|
||||||
|
extern int FAT_UpdateDir(int go_up);
|
||||||
|
extern int FAT_ParseDirectory(void);
|
||||||
|
extern int FAT_LoadFile(unsigned char* buffer);
|
||||||
|
extern int FAT_Open (int device);
|
||||||
|
|
||||||
|
#endif
|
@ -9,8 +9,6 @@
|
|||||||
#include "shared.h"
|
#include "shared.h"
|
||||||
|
|
||||||
#define ARAMSTART 0x8000
|
#define ARAMSTART 0x8000
|
||||||
|
|
||||||
|
|
||||||
#define ARAM_READ 1
|
#define ARAM_READ 1
|
||||||
#define ARAM_WRITE 0
|
#define ARAM_WRITE 0
|
||||||
|
|
||||||
@ -20,8 +18,7 @@
|
|||||||
* Passing NULL for array list, and 0 items to allocate.
|
* Passing NULL for array list, and 0 items to allocate.
|
||||||
* Required so libOGC knows to handle any interrupts etc.
|
* Required so libOGC knows to handle any interrupts etc.
|
||||||
*/
|
*/
|
||||||
void
|
void StartARAM ()
|
||||||
StartARAM ()
|
|
||||||
{
|
{
|
||||||
AR_Init (NULL, 0);
|
AR_Init (NULL, 0);
|
||||||
}
|
}
|
||||||
@ -31,8 +28,7 @@ StartARAM ()
|
|||||||
*
|
*
|
||||||
* Move data from MAIN memory to ARAM
|
* Move data from MAIN memory to ARAM
|
||||||
*/
|
*/
|
||||||
void
|
void ARAMPut (char *src, char *dst, int len)
|
||||||
ARAMPut (char *src, char *dst, int len)
|
|
||||||
{
|
{
|
||||||
DCFlushRange (src, len);
|
DCFlushRange (src, len);
|
||||||
AR_StartDMA( ARAM_WRITE, (u32)src, (u32)dst, len);
|
AR_StartDMA( ARAM_WRITE, (u32)src, (u32)dst, len);
|
||||||
@ -51,16 +47,3 @@ ARAMFetch (char *dst, char *src, int len)
|
|||||||
AR_StartDMA( ARAM_READ, (u32) dst, (u32) src, len);
|
AR_StartDMA( ARAM_READ, (u32) dst, (u32) src, len);
|
||||||
while (AR_GetDMAStatus());
|
while (AR_GetDMAStatus());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* ShadowROM
|
|
||||||
* Copy the rom from cart_rom into ARAM
|
|
||||||
* NB: libOGC appears to use the first 0x4000 bytes.
|
|
||||||
* As there's plenty left, all ARAM addresses are 0x8000 based.
|
|
||||||
* Here, the ROM is simply copied in one swift movement :)
|
|
||||||
*/
|
|
||||||
void
|
|
||||||
ShadowROM ()
|
|
||||||
{
|
|
||||||
ARAMPut ((char *)cart_rom, (void *) ARAMSTART, genromsize);
|
|
||||||
}
|
|
||||||
|
@ -7,8 +7,11 @@
|
|||||||
* Good to know :)
|
* Good to know :)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
extern void StartARAM ();
|
#ifndef _ARAM_H
|
||||||
void ShadowROM ();
|
#define _ARAM_H
|
||||||
void ARAMFetch (char *src, char *dst, int len);
|
|
||||||
void ARAMPut (char *src, char *dst, int len);
|
|
||||||
|
|
||||||
|
extern void StartARAM ();
|
||||||
|
extern void ARAMFetch (char *src, char *dst, int len);
|
||||||
|
extern void ARAMPut (char *src, char *dst, int len);
|
||||||
|
|
||||||
|
#endif
|
||||||
|
@ -1,29 +0,0 @@
|
|||||||
/****************************************************************************
|
|
||||||
* Nintendo Gamecube DVD Reading Library
|
|
||||||
*
|
|
||||||
* This is NOT a complete DVD library, in that it works for reading
|
|
||||||
* ISO9660 discs only.
|
|
||||||
*
|
|
||||||
* If you need softmod drivecodes etc, look elsewhere.
|
|
||||||
* There are known issues with libogc dvd handling, so these work
|
|
||||||
* outside of it ,if you will.
|
|
||||||
*
|
|
||||||
* This is ideal for using with a gc-linux self booting DVD only.
|
|
||||||
* Go http://www.gc-linux.org for further information and the tools
|
|
||||||
* for your platform.
|
|
||||||
*
|
|
||||||
* To keep libOGC stable, make sure you call DVD_Init before using
|
|
||||||
* these functions.
|
|
||||||
***************************************************************************/
|
|
||||||
#ifndef _DVD_H_
|
|
||||||
#define _DVD_H_
|
|
||||||
|
|
||||||
extern u32 dvd_read (void *dst, u32 len, u64 offset);
|
|
||||||
extern void dvd_motor_off ();
|
|
||||||
|
|
||||||
#ifndef HW_RVL
|
|
||||||
extern void uselessinquiry ();
|
|
||||||
extern void dvd_drive_detect();
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif
|
|
@ -11,56 +11,22 @@
|
|||||||
*
|
*
|
||||||
***************************************************************************/
|
***************************************************************************/
|
||||||
#include "shared.h"
|
#include "shared.h"
|
||||||
#include "iso9660.h"
|
|
||||||
#include "font.h"
|
#include "font.h"
|
||||||
#include "fileio.h"
|
#include "fileio_dvd.h"
|
||||||
#include "history.h"
|
#include "fileio_fat.h"
|
||||||
#include "dvd.h"
|
#include "filesel.h"
|
||||||
|
|
||||||
#ifdef HW_RVL
|
/* Global Variables */
|
||||||
#include <di/di.h>
|
int maxfiles = 0;
|
||||||
#endif
|
int offset = 0;
|
||||||
|
int selection = 0;
|
||||||
|
int old_selection = 0;
|
||||||
|
int old_offset = 0;
|
||||||
|
int useFAT = 0;
|
||||||
|
int useHistory = 0;
|
||||||
|
int haveDVDdir = 0;
|
||||||
|
int haveFATdir = 0;
|
||||||
|
|
||||||
#define PAGESIZE 12
|
|
||||||
|
|
||||||
static int maxfiles;
|
|
||||||
static int offset = 0;
|
|
||||||
static int selection = 0;
|
|
||||||
static int old_selection = 0;
|
|
||||||
static int old_offset = 0;
|
|
||||||
static char rootFATdir[256];
|
|
||||||
static u8 haveDVDdir = 0;
|
|
||||||
static u8 haveFATdir = 0;
|
|
||||||
static u8 UseFAT = 0;
|
|
||||||
static u8 UseHistory = 0;
|
|
||||||
static int LoadFile (unsigned char *buffer);
|
|
||||||
|
|
||||||
/***************************************************************************
|
|
||||||
* FileSortCallback (Marty Disibio)
|
|
||||||
*
|
|
||||||
* 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);
|
|
||||||
}
|
|
||||||
|
|
||||||
/***************************************************************************
|
/***************************************************************************
|
||||||
* ShowFiles
|
* ShowFiles
|
||||||
@ -87,137 +53,17 @@ static void ShowFiles (int offset, int selection)
|
|||||||
SetScreen ();
|
SetScreen ();
|
||||||
}
|
}
|
||||||
|
|
||||||
/***************************************************************************
|
|
||||||
* updateFATdirname
|
|
||||||
*
|
|
||||||
* Update ROOT directory while browsing SDCARD
|
|
||||||
***************************************************************************/
|
|
||||||
static int updateFATdirname()
|
|
||||||
{
|
|
||||||
int size=0;
|
|
||||||
char *test;
|
|
||||||
char temp[1024];
|
|
||||||
|
|
||||||
/* current directory doesn't change */
|
|
||||||
if (strcmp(filelist[selection].filename,".") == 0) return 0;
|
|
||||||
|
|
||||||
/* go up to parent directory */
|
|
||||||
else if (strcmp(filelist[selection].filename,"..") == 0)
|
|
||||||
{
|
|
||||||
/* determine last subdirectory namelength */
|
|
||||||
sprintf(temp,"%s",rootFATdir);
|
|
||||||
test= strtok(temp,"/");
|
|
||||||
while (test != NULL)
|
|
||||||
{
|
|
||||||
size = strlen(test);
|
|
||||||
test = strtok(NULL,"/");
|
|
||||||
}
|
|
||||||
|
|
||||||
/* remove last subdirectory name */
|
|
||||||
size = strlen(rootFATdir) - size;
|
|
||||||
rootFATdir[size-1] = 0;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
sprintf(rootFATdir, "%s%s/",rootFATdir, filelist[selection].filename);
|
|
||||||
}
|
|
||||||
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
/***************************************************************************
|
|
||||||
* parseFATdirectory
|
|
||||||
*
|
|
||||||
* List files into one SDCARD directory
|
|
||||||
***************************************************************************/
|
|
||||||
static int parseFATdirectory()
|
|
||||||
{
|
|
||||||
int nbfiles = 0;
|
|
||||||
char filename[MAXPATHLEN];
|
|
||||||
struct stat filestat;
|
|
||||||
|
|
||||||
/* open directory */
|
|
||||||
DIR_ITER *dir = diropen (rootFATdir);
|
|
||||||
if (dir == NULL)
|
|
||||||
{
|
|
||||||
sprintf(filename, "Error opening %s", rootFATdir);
|
|
||||||
WaitPrompt (filename);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
while (dirnext(dir, filename, &filestat) == 0)
|
|
||||||
{
|
|
||||||
if (strcmp(filename,".") != 0)
|
|
||||||
{
|
|
||||||
memset(&filelist[nbfiles], 0, sizeof (FILEENTRIES));
|
|
||||||
sprintf(filelist[nbfiles].filename,"%s",filename);
|
|
||||||
filelist[nbfiles].length = filestat.st_size;
|
|
||||||
filelist[nbfiles].flags = (filestat.st_mode & S_IFDIR) ? 1 : 0;
|
|
||||||
nbfiles++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
dirclose(dir);
|
|
||||||
|
|
||||||
/* Sort the file list */
|
|
||||||
qsort(filelist, nbfiles, sizeof(FILEENTRIES), FileSortCallback);
|
|
||||||
|
|
||||||
return nbfiles;
|
|
||||||
}
|
|
||||||
|
|
||||||
/****************************************************************************
|
|
||||||
* FileSelected
|
|
||||||
*
|
|
||||||
* Called when a file is selected by the user inside the FileSelector loop.
|
|
||||||
****************************************************************************/
|
|
||||||
static int FileSelected()
|
|
||||||
{
|
|
||||||
/* If loading from history then we need to setup a few more things. */
|
|
||||||
if(UseHistory)
|
|
||||||
{
|
|
||||||
/* Get the parent folder for the file. */
|
|
||||||
strncpy(rootFATdir, history.entries[selection].filepath, MAXJOLIET-1);
|
|
||||||
rootFATdir[MAXJOLIET-1] = '\0';
|
|
||||||
|
|
||||||
/* Get the length of the file. This has to be done
|
|
||||||
* before calling LoadFile(). */
|
|
||||||
char filepath[MAXJOLIET];
|
|
||||||
struct stat filestat;
|
|
||||||
snprintf(filepath, MAXJOLIET-1, "%s%s", history.entries[selection].filepath, history.entries[selection].filename);
|
|
||||||
filepath[MAXJOLIET-1] = '\0';
|
|
||||||
if(stat(filepath, &filestat) == 0)
|
|
||||||
{
|
|
||||||
filelist[selection].length = filestat.st_size;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Add/move the file to the top of the history. */
|
|
||||||
if (UseFAT) history_add_file(rootFATdir, filelist[selection].filename);
|
|
||||||
|
|
||||||
rootdir = filelist[selection].offset;
|
|
||||||
rootdirlength = filelist[selection].length;
|
|
||||||
memfile_autosave();
|
|
||||||
genromsize = LoadFile(cart_rom);
|
|
||||||
if (genromsize)
|
|
||||||
{
|
|
||||||
reloadrom();
|
|
||||||
memfile_autoload();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
* FileSelector
|
* FileSelector
|
||||||
*
|
*
|
||||||
* Let user select a file from the File listing
|
* Let user select a file from the File listing
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
static int FileSelector ()
|
int FileSelector()
|
||||||
{
|
{
|
||||||
short p;
|
short p;
|
||||||
int redraw = 1;
|
int redraw = 1;
|
||||||
int go_up = 0;
|
int go_up = 0;
|
||||||
|
int ret;
|
||||||
int i,size;
|
int i,size;
|
||||||
|
|
||||||
while (1)
|
while (1)
|
||||||
@ -298,21 +144,6 @@ static int FileSelector ()
|
|||||||
redraw = 1;
|
redraw = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* go up one directory or quit */
|
|
||||||
if (p & PAD_BUTTON_B)
|
|
||||||
{
|
|
||||||
filelist[selection].filename_offset = 0;
|
|
||||||
if (UseFAT)
|
|
||||||
{
|
|
||||||
if (strcmp(filelist[0].filename,"..") != 0) return 0;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (basedir == rootdir) return 0;
|
|
||||||
}
|
|
||||||
go_up = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* quit */
|
/* quit */
|
||||||
if (p & PAD_TRIGGER_Z)
|
if (p & PAD_TRIGGER_Z)
|
||||||
{
|
{
|
||||||
@ -321,349 +152,45 @@ static int FileSelector ()
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* open selected file or directory */
|
/* open selected file or directory */
|
||||||
if ((p & PAD_BUTTON_A) || go_up)
|
if ((p & PAD_BUTTON_A) || (p & PAD_BUTTON_B))
|
||||||
{
|
{
|
||||||
filelist[selection].filename_offset = 0;
|
filelist[selection].filename_offset = 0;
|
||||||
if (go_up)
|
|
||||||
{
|
|
||||||
/* select item #1 */
|
|
||||||
go_up = 0;
|
go_up = 0;
|
||||||
selection = UseFAT ? 0 : 1;
|
|
||||||
|
if (p & PAD_BUTTON_B)
|
||||||
|
{
|
||||||
|
/* go up one directory or quit */
|
||||||
|
go_up = 1;
|
||||||
|
selection = useFAT ? 0 : 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*** This is directory ***/
|
/*** This is directory ***/
|
||||||
if (filelist[selection].flags)
|
if (filelist[selection].flags)
|
||||||
{
|
{
|
||||||
/* SDCARD directory handler */
|
/* get new directory */
|
||||||
if (UseFAT)
|
ret = useFAT ? FAT_UpdateDir(go_up) : DVD_UpdateDir(go_up);
|
||||||
{
|
|
||||||
/* update current directory */
|
/* get new entry list or quit */
|
||||||
if (updateFATdirname())
|
if (ret) maxfiles = useFAT ? FAT_ParseDirectory() : DVD_ParseDirectory();
|
||||||
{
|
else return 0;
|
||||||
/* reinit selector (previous value is saved for one level) */
|
|
||||||
if (selection == 0)
|
|
||||||
{
|
|
||||||
selection = old_selection;
|
|
||||||
offset = old_offset;
|
|
||||||
old_selection = 0;
|
|
||||||
old_offset = 0;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
/* save current selector value */
|
|
||||||
old_selection = selection;
|
|
||||||
old_offset = offset;
|
|
||||||
selection = 0;
|
|
||||||
offset = 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* set new entry list */
|
/*** This is a file ***/
|
||||||
maxfiles = parseFATdirectory();
|
else
|
||||||
if (!maxfiles)
|
|
||||||
{
|
{
|
||||||
/* quit */
|
/* Load file */
|
||||||
WaitPrompt ("No files found !");
|
genromsize = useFAT ? FAT_LoadFile(cart_rom) : DVD_LoadFile(cart_rom);
|
||||||
haveFATdir = 0;
|
if (genromsize)
|
||||||
|
{
|
||||||
|
memfile_autosave();
|
||||||
|
reloadrom();
|
||||||
|
memfile_autoload();
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
|
||||||
else /* DVD directory handler */
|
|
||||||
{
|
|
||||||
/* move to a new directory */
|
|
||||||
if (selection != 0)
|
|
||||||
{
|
|
||||||
/* update current directory */
|
|
||||||
rootdir = filelist[selection].offset;
|
|
||||||
rootdirlength = filelist[selection].length;
|
|
||||||
|
|
||||||
/* reinit selector (previous value is saved for one level) */
|
|
||||||
if (selection == 1)
|
|
||||||
{
|
|
||||||
selection = old_selection;
|
|
||||||
offset = old_offset;
|
|
||||||
old_selection = 0;
|
|
||||||
old_offset = 0;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
/* save current selector value */
|
|
||||||
old_selection = selection;
|
|
||||||
old_offset = offset;
|
|
||||||
selection = 0;
|
|
||||||
offset = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* get new entry list */
|
|
||||||
maxfiles = parseDVDdirectory ();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else /*** This is a file ***/
|
|
||||||
{
|
|
||||||
return FileSelected();
|
|
||||||
}
|
|
||||||
redraw = 1;
|
redraw = 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/****************************************************************************
|
|
||||||
* OpenDVD
|
|
||||||
*
|
|
||||||
* Function to load a DVD directory and display to user.
|
|
||||||
****************************************************************************/
|
|
||||||
int OpenDVD ()
|
|
||||||
{
|
|
||||||
UseFAT = 0;
|
|
||||||
UseHistory = 0;
|
|
||||||
|
|
||||||
if (!getpvd())
|
|
||||||
{
|
|
||||||
/* mount DVD */
|
|
||||||
ShowAction("Mounting DVD ... Wait");
|
|
||||||
|
|
||||||
#ifndef HW_RVL
|
|
||||||
DVD_Mount();
|
|
||||||
#else
|
|
||||||
u32 val;
|
|
||||||
DI_GetCoverRegister(&val);
|
|
||||||
|
|
||||||
if(val & 0x1)
|
|
||||||
{
|
|
||||||
WaitPrompt("No Disc inserted !");
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
DI_Mount();
|
|
||||||
while(DI_GetStatus() & DVD_INIT);
|
|
||||||
if (!(DI_GetStatus() & DVD_READY))
|
|
||||||
{
|
|
||||||
char msg[50];
|
|
||||||
sprintf(msg, "DI Status Error: 0x%08X\n",DI_GetStatus());
|
|
||||||
WaitPrompt(msg);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
haveDVDdir = 0;
|
|
||||||
if (!getpvd())
|
|
||||||
{
|
|
||||||
WaitPrompt ("Failed to mount DVD");
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (haveDVDdir == 0)
|
|
||||||
{
|
|
||||||
/* don't mess with SD entries */
|
|
||||||
haveFATdir = 0;
|
|
||||||
|
|
||||||
/* reinit selector */
|
|
||||||
rootdir = basedir;
|
|
||||||
old_selection = selection = offset = old_offset = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Parse root directory and get entries list */
|
|
||||||
ShowAction("Reading Directory ...");
|
|
||||||
if ((maxfiles = parseDVDdirectory ()))
|
|
||||||
{
|
|
||||||
/* Select an entry */
|
|
||||||
haveDVDdir = 1;
|
|
||||||
return FileSelector ();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
/* no entries found */
|
|
||||||
WaitPrompt ("no files found !");
|
|
||||||
haveDVDdir = 0;
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/****************************************************************************
|
|
||||||
* OpenFAT
|
|
||||||
*
|
|
||||||
* Function to load a FAT directory and display to user.
|
|
||||||
****************************************************************************/
|
|
||||||
int OpenFAT (char *name)
|
|
||||||
{
|
|
||||||
UseFAT = 1;
|
|
||||||
UseHistory = 0;
|
|
||||||
|
|
||||||
if (haveFATdir == 0)
|
|
||||||
{
|
|
||||||
/* don't mess with DVD entries */
|
|
||||||
haveDVDdir = 0;
|
|
||||||
|
|
||||||
/* reinit selector */
|
|
||||||
old_selection = selection = offset = old_offset = 0;
|
|
||||||
|
|
||||||
/* Reset SDCARD root directory */
|
|
||||||
sprintf (rootFATdir, "%s/genplus/roms/", name);
|
|
||||||
|
|
||||||
/* if directory doesn't exist, use root */
|
|
||||||
DIR_ITER *dir = diropen(rootFATdir);
|
|
||||||
if (dir == NULL) sprintf (rootFATdir, "%s/", name);
|
|
||||||
else dirclose(dir);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Parse root directory and get entries list */
|
|
||||||
ShowAction("Reading Directory ...");
|
|
||||||
if ((maxfiles = parseFATdirectory ()))
|
|
||||||
{
|
|
||||||
/* Select an entry */
|
|
||||||
haveFATdir = 1;
|
|
||||||
return FileSelector ();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
/* no entries found */
|
|
||||||
WaitPrompt ("no files found !");
|
|
||||||
haveFATdir = 0;
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/****************************************************************************
|
|
||||||
* OpenHistory
|
|
||||||
*
|
|
||||||
* Function to load a recent file from SDCARD (Marty Disibio)
|
|
||||||
****************************************************************************/
|
|
||||||
int OpenHistory()
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
|
|
||||||
UseFAT = 1;
|
|
||||||
UseHistory = 1;
|
|
||||||
|
|
||||||
/* don't mess with other entries */
|
|
||||||
haveFATdir = 0;
|
|
||||||
haveDVDdir = 0;
|
|
||||||
|
|
||||||
/* reinit selector */
|
|
||||||
old_selection = selection = offset = old_offset = 0;
|
|
||||||
|
|
||||||
/* Recreate the file listing from the history
|
|
||||||
* as if all of the roms were in the same directory. */
|
|
||||||
ShowAction("Reading Files ...");
|
|
||||||
|
|
||||||
maxfiles = 0;
|
|
||||||
for(i=0; i < NUM_HISTORY_ENTRIES; i++)
|
|
||||||
{
|
|
||||||
if(history.entries[i].filepath[0] > 0)
|
|
||||||
{
|
|
||||||
filelist[i].offset = 0;
|
|
||||||
filelist[i].length = 0;
|
|
||||||
filelist[i].flags = 0;
|
|
||||||
filelist[i].filename_offset = 0;
|
|
||||||
strncpy(filelist[i].filename, history.entries[i].filename, MAXJOLIET-1);
|
|
||||||
filelist[i].filename[MAXJOLIET-1] = '\0';
|
|
||||||
|
|
||||||
maxfiles++;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
/* Found the end of the list. */
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if(!maxfiles)
|
|
||||||
{
|
|
||||||
WaitPrompt ("No recent files");
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
return FileSelector();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/****************************************************************************
|
|
||||||
* LoadFile
|
|
||||||
*
|
|
||||||
* This function will load a file from DVD or SDCARD, in BIN, SMD or ZIP format.
|
|
||||||
* The values for offset and length are inherited from rootdir and
|
|
||||||
* rootdirlength.
|
|
||||||
*
|
|
||||||
* The buffer parameter should re-use the initial ROM buffer.
|
|
||||||
****************************************************************************/
|
|
||||||
static int LoadFile (unsigned char *buffer)
|
|
||||||
{
|
|
||||||
u64 discoffset = 0;
|
|
||||||
char readbuffer[2048];
|
|
||||||
char fname[MAXPATHLEN];
|
|
||||||
FILE *sdfile = NULL;
|
|
||||||
|
|
||||||
if (rootdirlength == 0) return 0;
|
|
||||||
|
|
||||||
/* SDCard access */
|
|
||||||
if (UseFAT)
|
|
||||||
{
|
|
||||||
/* open file */
|
|
||||||
sprintf(fname, "%s%s",rootFATdir,filelist[selection].filename);
|
|
||||||
sdfile = fopen(fname, "rb");
|
|
||||||
if (sdfile == NULL)
|
|
||||||
{
|
|
||||||
WaitPrompt ("Unable to open file!");
|
|
||||||
haveFATdir = 0;
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
ShowAction ("Loading ... Wait");
|
|
||||||
|
|
||||||
/* Read first data chunk */
|
|
||||||
if (UseFAT)
|
|
||||||
{
|
|
||||||
fread(readbuffer, 1, 2048, sdfile);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
discoffset = rootdir;
|
|
||||||
dvd_read (&readbuffer, 2048, discoffset);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* determine file type */
|
|
||||||
if (!IsZipFile ((char *) readbuffer))
|
|
||||||
{
|
|
||||||
if (UseFAT)
|
|
||||||
{
|
|
||||||
/* go back to file start and read file */
|
|
||||||
fseek(sdfile, 0, SEEK_SET);
|
|
||||||
fread(buffer, 1, rootdirlength, sdfile);
|
|
||||||
fclose(sdfile);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
/* How many 2k blocks to read */
|
|
||||||
int blocks = rootdirlength / 2048;
|
|
||||||
int readoffset = 0;
|
|
||||||
int i;
|
|
||||||
|
|
||||||
/* read data chunks */
|
|
||||||
for (i = 0; i < blocks; i++)
|
|
||||||
{
|
|
||||||
dvd_read(readbuffer, 2048, discoffset);
|
|
||||||
discoffset += 2048;
|
|
||||||
memcpy (buffer + readoffset, readbuffer, 2048);
|
|
||||||
readoffset += 2048;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* final read */
|
|
||||||
i = rootdirlength % 2048;
|
|
||||||
if (i)
|
|
||||||
{
|
|
||||||
dvd_read (readbuffer, 2048, discoffset);
|
|
||||||
memcpy (buffer + readoffset, readbuffer, i);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
/* unzip file */
|
|
||||||
if (UseFAT) return UnZipFAT(buffer, fname);
|
|
||||||
else return UnZipDVD (buffer, discoffset, rootdirlength);
|
|
||||||
}
|
|
||||||
|
|
||||||
return rootdirlength;
|
|
||||||
}
|
|
||||||
|
35
source/ngc/gui/filesel.h
Normal file
35
source/ngc/gui/filesel.h
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
/****************************************************************************
|
||||||
|
* ROM Selection Interface
|
||||||
|
*
|
||||||
|
***************************************************************************/
|
||||||
|
#ifndef _FILESEL_H
|
||||||
|
#define _FILESEL_H
|
||||||
|
|
||||||
|
#define MAXJOLIET 256
|
||||||
|
#define MAXFILES 1000
|
||||||
|
#define PAGESIZE 12
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
u64 offset;
|
||||||
|
unsigned int length;
|
||||||
|
char flags;
|
||||||
|
char filename[MAXJOLIET];
|
||||||
|
u16 filename_offset;
|
||||||
|
}FILEENTRIES;
|
||||||
|
|
||||||
|
FILEENTRIES filelist[MAXFILES];
|
||||||
|
|
||||||
|
/* Global Variables */
|
||||||
|
extern int maxfiles;
|
||||||
|
extern int offset;
|
||||||
|
extern int selection;
|
||||||
|
extern int old_selection;
|
||||||
|
extern int old_offset;
|
||||||
|
extern int useFAT;
|
||||||
|
extern int haveDVDdir;
|
||||||
|
extern int haveFATdir;
|
||||||
|
|
||||||
|
extern int FileSelector();
|
||||||
|
|
||||||
|
#endif
|
@ -7,614 +7,7 @@
|
|||||||
#include "shared.h"
|
#include "shared.h"
|
||||||
#include "gpback.h"
|
#include "gpback.h"
|
||||||
|
|
||||||
/*** IPL Font (ripped from original BOOTROM) ***/
|
/* Backdrop */
|
||||||
#if 0
|
|
||||||
static unsigned char iplfont[]=
|
|
||||||
{
|
|
||||||
0x59,0x61,0x79,0x30,0x00,0x01,0x01,0x10,0x00,0x00,0x03,0x08,0x00,0x00,0x13,0x94,
|
|
||||||
0xfd,0x77,0x7e,0xfb,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xfb,0xff,0xff,
|
|
||||||
0xfe,0xff,0x7f,0x9f,0xff,0xff,0xfd,0xed,0xdb,0xb3,0x3f,0x73,0x27,0xdf,0xbe,0xfb,
|
|
||||||
0xe7,0x3e,0xe9,0xfd,0xf9,0x51,0xfd,0xf7,0xdf,0x7d,0x5f,0x77,0xee,0x7d,0xdf,0xff,
|
|
||||||
0xfb,0xff,0x7f,0xfb,0xbf,0xb7,0xef,0xff,0xeb,0xff,0xdf,0xaf,0x7d,0xf1,0xdd,0x7f,
|
|
||||||
0xff,0xbf,0xb3,0xff,0x7e,0x9f,0xbf,0x7f,0xfe,0xbf,0xdf,0xf4,0xfe,0x7d,0xff,0xff,
|
|
||||||
0xba,0x6f,0xe5,0xff,0xfe,0xd4,0xbf,0xf7,0xbe,0x7e,0xbf,0xcf,0xbf,0xf5,0x6b,0xfd,
|
|
||||||
0xff,0xd7,0xd5,0x7f,0x7a,0xd0,0xbe,0xd3,0xf5,0xfe,0xff,0xe5,0xbf,0x7e,0xf9,0xfc,
|
|
||||||
0x79,0x67,0xe8,0x35,0xbe,0x9b,0xbf,0x72,0xf0,0xcf,0x49,0xf7,0xd5,0x72,0xb6,0x7c,
|
|
||||||
0xff,0xf5,0xa3,0xfc,0xfa,0xba,0xa9,0x97,0xb5,0xb9,0xfb,0x1f,0xff,0xc0,0xb2,0x2f,
|
|
||||||
0xf4,0xe7,0x3f,0xff,0xfe,0xff,0x43,0xff,0x6f,0x69,0xaf,0xdc,0xe7,0x8c,0x48,0xaa,
|
|
||||||
0x3f,0x00,0x0f,0x70,0x73,0x28,0x3b,0x1f,0x1a,0x7f,0xa4,0xff,0x42,0x7a,0x7f,0x6b,
|
|
||||||
0x74,0x8f,0xaa,0xbc,0xaf,0xa3,0xcd,0x5e,0x02,0x16,0x3e,0xaa,0xfc,0x55,0xce,0x2d,
|
|
||||||
0x7b,0x3c,0xa9,0x57,0xd2,0x72,0x7f,0x7f,0x7f,0xaf,0xb4,0x3f,0xec,0xab,0xff,0xff,
|
|
||||||
0xff,0xfd,0xff,0xfe,0xff,0xea,0x6a,0x93,0xa0,0x49,0x4f,0xc6,0x9e,0x04,0xb6,0x7f,
|
|
||||||
0xfd,0xff,0xfa,0x54,0xf4,0xcb,0xa9,0x3d,0x0a,0x14,0xa7,0xe3,0x77,0xd2,0xdf,0xfd,
|
|
||||||
0xff,0xe2,0xff,0x8e,0x07,0xff,0x89,0x8e,0x80,0x88,0x73,0x7a,0x71,0x04,0x6f,0xbf,
|
|
||||||
0x52,0x9f,0x3f,0xd2,0x9f,0x1c,0x18,0xf7,0xff,0x82,0x95,0x7f,0xae,0x64,0x3d,0xd7,
|
|
||||||
0x9e,0x0b,0xa3,0xfc,0x81,0x17,0xa8,0x7f,0x9f,0xd3,0xf9,0x6a,0xb2,0x88,0xb4,0xf1,
|
|
||||||
0x2d,0xef,0xaf,0xd7,0xc7,0xc0,0x50,0xb6,0xe4,0xce,0xff,0xf7,0xe8,0x50,0xfe,0xd4,
|
|
||||||
0x80,0x31,0x3e,0x32,0x1a,0x27,0x9f,0xb9,0xfe,0x3f,0x11,0xb9,0xdd,0xcf,0xe0,0x9b,
|
|
||||||
0xe5,0xff,0xef,0xfc,0x9f,0x54,0x5f,0x53,0xa4,0xff,0xc4,0x4d,0xfe,0xff,0x53,0xff,
|
|
||||||
0x7f,0xdf,0x87,0xfd,0xff,0x7e,0x57,0xea,0xa6,0x4f,0xca,0xc8,0xfd,0x7f,0xfb,0xf2,
|
|
||||||
0xed,0x78,0xfb,0x57,0xff,0xc9,0xfc,0x9f,0xf4,0x75,0xff,0x5b,0xf3,0xfb,0xfa,0xa8,
|
|
||||||
0x7d,0xef,0xdd,0x3a,0x3e,0xfd,0x5b,0xe9,0xe3,0xf9,0x27,0xfd,0xef,0x3f,0xf7,0x44,
|
|
||||||
0xde,0xff,0x7e,0xbf,0x9d,0xab,0xfd,0xea,0xad,0xf1,0x63,0xfc,0xf9,0x98,0x3c,0xca,
|
|
||||||
0x9b,0x7c,0xdf,0xea,0xfd,0x57,0x42,0xfc,0xff,0xfa,0xff,0x7f,0xef,0xf9,0xf9,0x7d,
|
|
||||||
0xaa,0x0b,0xf9,0x74,0xcd,0xff,0x74,0xff,0xcf,0xfb,0xff,0x56,0xaa,0x56,0x6f,0xf5,
|
|
||||||
0x3d,0xf5,0x1a,0xad,0x2d,0xff,0x57,0xbd,0xd5,0x00,0x7f,0xf9,0x57,0xfe,0xd6,0x95,
|
|
||||||
0xdf,0xd8,0xa9,0xff,0xfb,0xf3,0x7f,0xfe,0xaf,0xf7,0xfe,0x5f,0xff,0xbf,0x13,0xf7,
|
|
||||||
0xd2,0xff,0xdf,0xf7,0xde,0xff,0xfd,0x7f,0xff,0xc7,0xd0,0xb6,0xff,0xff,0xc7,0xd5,
|
|
||||||
0xff,0x7c,0xfe,0x28,0x57,0xab,0xf9,0x7b,0xf3,0xdf,0xee,0x9f,0xab,0xdd,0x55,0xe9,
|
|
||||||
0xef,0x93,0xd4,0xac,0x97,0x09,0x6f,0xf1,0xfe,0xfa,0xbf,0xef,0xfd,0x7f,0x9d,0x3d,
|
|
||||||
0xf2,0xa4,0x3a,0x25,0x55,0xef,0xfa,0x92,0xa5,0x50,0xcd,0xfd,0x63,0xab,0xec,0x69,
|
|
||||||
0x3f,0x1e,0xee,0x4d,0xff,0xff,0xef,0x9f,0xfe,0xbf,0xfa,0x57,0xc2,0xff,0x5f,0xe2,
|
|
||||||
0xaa,0xaa,0xb7,0x58,0xa7,0xc4,0xd9,0xed,0xfa,0xa0,0x6f,0x97,0xfa,0x9d,0xbf,0xc9,
|
|
||||||
0xac,0xa7,0x7a,0x57,0xbd,0xff,0x7c,0xf5,0x16,0xaa,0xbc,0x7a,0xbd,0x27,0xd6,0xaf,
|
|
||||||
0xf3,0x98,0xbe,0x97,0xd5,0xd2,0x7f,0x5e,0x5f,0xed,0x96,0xff,0x3f,0x42,0xe9,0x52,
|
|
||||||
0x55,0xc4,0x52,0x58,0x8e,0x57,0x55,0x52,0xca,0x65,0x7b,0xdc,0x5d,0x41,0xff,0x5b,
|
|
||||||
0x2f,0xff,0xf9,0xf7,0xaf,0xea,0x7c,0x89,0x09,0xea,0x7c,0xf4,0xdf,0xff,0xa3,0x07,
|
|
||||||
0xbe,0x22,0x5f,0x4c,0xff,0xf2,0xbf,0xe1,0x7f,0xaa,0x32,0xaf,0xd5,0xfe,0xd1,0xcc,
|
|
||||||
0xf7,0xaa,0x54,0xc5,0x80,0xf4,0x5f,0xde,0xc3,0xba,0xc0,0x81,0x31,0x5c,0xb2,0x7f,
|
|
||||||
0xc9,0xac,0xbd,0xfe,0x39,0xff,0xf2,0x8a,0xd5,0x34,0x2d,0xe4,0x83,0xff,0x7f,0xf4,
|
|
||||||
0xff,0x0b,0xff,0xf5,0xaa,0xa2,0x49,0xd1,0x0b,0xe3,0x73,0x7f,0x97,0xf0,0xaa,0x0a,
|
|
||||||
0x8d,0xf3,0xe5,0xca,0x3f,0x6f,0xdf,0xfd,0x6e,0xa9,0xb5,0x51,0x13,0x7f,0x47,0x56,
|
|
||||||
0xfe,0xb1,0x51,0x54,0xa6,0x0c,0x16,0xef,0x55,0xa9,0xc5,0x52,0x8f,0xcf,0xcd,0xf7,
|
|
||||||
0x7d,0x22,0x0a,0x88,0xca,0x4f,0xf2,0xe2,0x80,0x65,0x41,0x6b,0x68,0x5f,0xfd,0x85,
|
|
||||||
0xfd,0xca,0x58,0xfe,0xb3,0xfb,0x52,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
|
||||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x03,0x10,0x09,0x10,0x07,0x10,0x15,
|
|
||||||
0x20,0x0a,0x30,0x13,0x10,0x0e,0x10,0x0a,0x10,0x06,0x10,0x17,0x10,0x1e,0x10,0x6b,
|
|
||||||
0x10,0x00,0x10,0x58,0x10,0x00,0x20,0x12,0x10,0x85,0x50,0x00,0x20,0x00,0x20,0x1f,
|
|
||||||
0x40,0x10,0x10,0x88,0x00,0x00,0x10,0x01,0x00,0x3f,0x20,0x01,0x80,0x6f,0x30,0x01,
|
|
||||||
0x00,0x7f,0x80,0x9f,0x00,0x2d,0x80,0xcf,0x00,0x60,0x90,0x5f,0x12,0x05,0xc0,0x9f,
|
|
||||||
0xb1,0x1d,0xa0,0x5f,0x01,0x3e,0x30,0x01,0x01,0x5f,0x01,0x8f,0x00,0x2f,0x51,0xe7,
|
|
||||||
0x01,0xef,0xa2,0x1f,0x10,0xf1,0x00,0x00,0x70,0xcf,0xa2,0xfe,0x83,0x0f,0x01,0x8f,
|
|
||||||
0x03,0x3f,0x83,0x6f,0x10,0x5f,0x01,0xef,0xb0,0x8f,0x03,0xaf,0x01,0xb0,0xb0,0x01,
|
|
||||||
0x04,0x3f,0x94,0x65,0x04,0x72,0x10,0x00,0xe4,0xaf,0x14,0x2f,0x45,0xcc,0xf4,0x2f,
|
|
||||||
0x20,0x01,0x23,0xf3,0x92,0xe0,0x12,0x1d,0x11,0x8d,0x12,0x35,0x20,0xc7,0xf3,0x10,
|
|
||||||
0x05,0x54,0x10,0xdb,0x60,0x01,0x05,0x8f,0x10,0x82,0x30,0x01,0x05,0xbf,0x13,0xd2,
|
|
||||||
0x12,0xe1,0x03,0xf1,0x30,0x01,0x40,0x01,0x83,0xff,0x01,0xc9,0x06,0x5a,0x86,0x7d,
|
|
||||||
0x04,0x5e,0x15,0xb1,0xd6,0x73,0x50,0x01,0x36,0xdc,0x10,0x07,0xd7,0x20,0x80,0x01,
|
|
||||||
0x07,0x40,0x42,0xf2,0x03,0x0b,0x23,0x20,0x30,0x90,0x26,0x94,0x10,0x2f,0x20,0x9b,
|
|
||||||
0x05,0xa1,0x17,0x25,0x50,0x01,0xc7,0xdf,0x05,0xbf,0x21,0xbb,0x37,0xf9,0x06,0x0b,
|
|
||||||
0x31,0x07,0x13,0x71,0x07,0x36,0x18,0x55,0x18,0x2d,0x13,0x4f,0x08,0xd8,0x22,0x0f,
|
|
||||||
0x40,0x5f,0x20,0x3d,0x13,0x56,0x10,0x1e,0x61,0x9b,0x12,0x3e,0x2a,0x25,0x97,0x1b,
|
|
||||||
0x03,0x0b,0x27,0xc7,0x17,0xff,0x09,0x8d,0x13,0xff,0x07,0xcc,0x13,0x01,0x72,0xef,
|
|
||||||
0x00,0xad,0x70,0x01,0x54,0x6e,0x64,0x01,0x04,0x60,0x20,0x01,0x08,0x1d,0x20,0x01,
|
|
||||||
0x01,0x50,0x13,0xca,0x3b,0xe2,0x06,0x6f,0x61,0xff,0x0b,0x1a,0x83,0xfb,0x0b,0x3b,
|
|
||||||
0x24,0x01,0x8b,0x6b,0x03,0x01,0x62,0x6f,0x1a,0x62,0x00,0x8f,0x35,0xa5,0x9b,0xc4,
|
|
||||||
0x43,0xfd,0x43,0x3f,0x03,0xf3,0x17,0x79,0x94,0x2f,0x0c,0x1f,0xc8,0xcf,0x38,0x9f,
|
|
||||||
0x0a,0x20,0x56,0x51,0xb5,0xf1,0x08,0xff,0xb9,0x2f,0x08,0xff,0x8c,0xcf,0x09,0x5f,
|
|
||||||
0x0a,0xcb,0x0b,0x40,0x09,0xdf,0xab,0xcd,0x09,0x8c,0x16,0xaf,0x9b,0xf0,0x46,0x93,
|
|
||||||
0xa4,0xf7,0xcd,0x3f,0xad,0xaf,0x06,0xae,0x9c,0x8a,0x98,0x01,0x20,0x8f,0x0e,0x10,
|
|
||||||
0x19,0x83,0x9b,0x6f,0x02,0x3f,0x98,0x61,0x2b,0xd1,0x00,0x2f,0xa8,0x91,0xb3,0x5a,
|
|
||||||
0x02,0xcf,0x98,0xc1,0x11,0x4f,0x03,0x2f,0x25,0x59,0x9f,0x9f,0x00,0x2f,0x06,0x7f,
|
|
||||||
0x5b,0x9a,0x1c,0xf9,0x19,0x09,0x19,0x09,0xe6,0xaf,0x24,0xcd,0x10,0x09,0x10,0x91,
|
|
||||||
0x58,0x9d,0x0e,0x49,0x19,0x8b,0x2d,0x77,0x1d,0x79,0x1b,0x61,0x06,0x4d,0x47,0x6f,
|
|
||||||
0x12,0xad,0x2a,0x80,0x19,0x2f,0x18,0xff,0x0f,0x70,0x29,0xa8,0x16,0x23,0x1a,0xe3,
|
|
||||||
0x11,0x23,0x25,0x33,0xff,0xa0,0x06,0x4b,0x00,0x2f,0x3e,0x5a,0x0f,0xd4,0x2b,0x6b,
|
|
||||||
0x46,0x1d,0x18,0xfd,0x2b,0x0b,0x1b,0x6b,0x36,0x2d,0x6b,0x6b,0x6d,0x3d,0x1b,0xb4,
|
|
||||||
0x1e,0xa9,0x9f,0x97,0x1e,0xc5,0x03,0x3f,0x1c,0x28,0x73,0x9d,0x16,0xef,0x17,0xaf,
|
|
||||||
0xfb,0x09,0x5b,0x0f,0x1a,0x4f,0x1c,0x37,0x70,0x01,0x1c,0x3e,0x10,0x53,0x1e,0x14,
|
|
||||||
0x1e,0x21,0x31,0xc3,0xfe,0xaf,0x50,0x01,0x13,0xfd,0x20,0x0b,0x10,0x01,0x10,0x8f,
|
|
||||||
0x07,0x3f,0x30,0x01,0x13,0x0f,0x0e,0x9f,0xc0,0x01,0x12,0x13,0x1b,0x45,0x13,0x3d,
|
|
||||||
0xfd,0xaf,0x60,0x2f,0x14,0x2b,0x2b,0xf2,0x6f,0xff,0x04,0xbb,0x7c,0x29,0x23,0xfd,
|
|
||||||
0x85,0x0e,0x1c,0x36,0x0b,0xff,0x80,0x8d,0x33,0x2f,0x2f,0xff,0x02,0xcf,0x49,0x4d,
|
|
||||||
0x19,0x53,0x21,0x1f,0x19,0x59,0x30,0xb7,0x13,0xf7,0x28,0x31,0x03,0xff,0x70,0x2f,
|
|
||||||
0x50,0x37,0x0f,0xef,0x1f,0x0d,0x48,0xff,0x38,0x6f,0x1c,0x6f,0x08,0x6f,0x19,0xef,
|
|
||||||
0x16,0x3a,0x69,0x2f,0x08,0x9f,0x1f,0x10,0x5d,0x5c,0x68,0x8f,0x0b,0x2d,0x53,0xcb,
|
|
||||||
0x7b,0x6f,0x1d,0x8b,0x00,0x5f,0x1a,0x1f,0x8b,0x9f,0x24,0x2d,0x16,0x4f,0x03,0xcf,
|
|
||||||
0x44,0x2f,0x0a,0xdd,0x1e,0x71,0x9f,0xff,0x1c,0xc0,0x0c,0xef,0xbf,0xf3,0xd0,0x0f,
|
|
||||||
0xfd,0xb1,0x50,0x4e,0x00,0xe7,0x9a,0x4e,0x27,0x39,0x2e,0xe0,0xac,0xad,0x0f,0xbb,
|
|
||||||
0x1a,0x3b,0x10,0xc7,0x3c,0xdf,0x1c,0xf0,0x6c,0xe9,0x9f,0xf9,0x26,0x41,0x5e,0x0f,
|
|
||||||
0x15,0xaf,0x1d,0x3e,0x0e,0x20,0x83,0xfd,0x4b,0x0f,0x1e,0xdd,0x0f,0x3f,0x12,0x6d,
|
|
||||||
0x12,0x9d,0x74,0xf3,0x0b,0x0f,0x3f,0xb6,0x23,0xcd,0x3b,0x5f,0x10,0x5d,0x04,0x2f,
|
|
||||||
0x30,0x2f,0xab,0x9f,0x03,0xff,0x0e,0xff,0x10,0xc1,0x1e,0x3d,0x51,0x7f,0x02,0xcf,
|
|
||||||
0x83,0xcf,0x4c,0xef,0x63,0xff,0x64,0x37,0x00,0x2f,0x0f,0xe0,0x19,0xbd,0x99,0xbf,
|
|
||||||
0x26,0x75,0x09,0x8e,0xba,0x0e,0x27,0xd9,0x00,0x2f,0x0f,0x30,0xaa,0xdf,0x1f,0xa3,
|
|
||||||
0x00,0x9f,0x17,0x6f,0x9c,0x1f,0x0a,0x4f,0x0c,0xbf,0xa9,0xef,0x13,0xd9,0x09,0xef,
|
|
||||||
0xcd,0x1f,0x0b,0x0f,0x19,0x85,0x0c,0xef,0x1d,0x1f,0x9c,0xef,0x1b,0xcf,0x0d,0x7f,
|
|
||||||
0x9d,0xdf,0x04,0x3c,0xa7,0x0f,0x1b,0xde,0x0d,0x4f,0x14,0x64,0xba,0xaf,0x18,0x13,
|
|
||||||
0x00,0x5f,0xac,0x4e,0x18,0xd8,0xb0,0x7f,0xb9,0xee,0xa1,0xdf,0x13,0xdb,0x0c,0xff,
|
|
||||||
0x26,0xa9,0xad,0x1f,0x00,0xbf,0xee,0x9f,0x1b,0x05,0x0f,0x3c,0x0e,0x5e,0x0e,0x8f,
|
|
||||||
0x0f,0xbc,0x1f,0x8b,0xaa,0x17,0x0e,0x6e,0xc0,0x01,0x23,0xf3,0xa0,0x03,0xfb,0x6f,
|
|
||||||
0x1c,0xfd,0x1b,0xf4,0x6a,0x47,0x1b,0xcd,0x05,0x2f,0x03,0xff,0xe0,0x9f,0x23,0xf3,
|
|
||||||
0xfa,0x7f,0x12,0x33,0x5a,0x4f,0x1a,0x8b,0x2c,0xb3,0x79,0xd6,0xef,0xff,0x70,0x01,
|
|
||||||
0x39,0xf1,0x1c,0x67,0x3a,0xb1,0x1b,0x43,0x0d,0x4f,0x1c,0xdf,0x1a,0xab,0x20,0x2f,
|
|
||||||
0x39,0x2b,0x1d,0x45,0x37,0x0d,0x2c,0xa6,0x0d,0x4f,0x79,0xef,0x1f,0x0d,0x22,0xb1,
|
|
||||||
0x23,0x65,0x0d,0x4e,0x2b,0xbd,0x17,0x13,0x57,0x11,0x5c,0xcb,0x23,0xfd,0x01,0xdf,
|
|
||||||
0xeb,0x3f,0x23,0xf3,0xa0,0x03,0x07,0x9f,0x1b,0x61,0x1b,0x61,0x37,0xf7,0x13,0x63,
|
|
||||||
0x10,0xbf,0x4a,0xf7,0x0a,0x3f,0x17,0x69,0x1e,0x19,0x1e,0x1b,0x4e,0x1d,0x2e,0x5f,
|
|
||||||
0x17,0x3b,0x1c,0xbd,0x2c,0xbf,0x5e,0x3d,0x1e,0x43,0x0e,0x6e,0x1b,0xe3,0x2e,0x87,
|
|
||||||
0x1c,0xed,0x21,0xed,0x11,0x78,0x5e,0x71,0x0f,0xff,0x1e,0x99,0x2c,0xc7,0x3e,0x9b,
|
|
||||||
0xb8,0xe3,0xb9,0x1f,0xd0,0x01,0x0f,0x6f,0x30,0xbb,0xa7,0x57,0x23,0x27,0x10,0x16,
|
|
||||||
0x14,0xcf,0x0f,0xff,0xd0,0x01,0x0f,0xd0,0xdf,0xf0,0x0c,0x00,0x27,0xf3,0x3b,0x30,
|
|
||||||
0x43,0xff,0x0b,0x9f,0xc8,0xff,0x28,0xe3,0x0d,0x2f,0x1d,0x2b,0x99,0x5f,0x16,0xa9,
|
|
||||||
0x09,0x5f,0x3f,0xea,0x80,0x9f,0x80,0xa3,0x7e,0x4f,0x4f,0xd3,0x00,0x8f,0x9a,0x4f,
|
|
||||||
0x4f,0xd4,0x0c,0xef,0x83,0xff,0x09,0xef,0x11,0x09,0xa9,0xed,0x1d,0xef,0x09,0xef,
|
|
||||||
0x3c,0xfd,0x2e,0xb3,0x0e,0x4e,0x2c,0xed,0x4d,0xaf,0x3d,0x1f,0x1f,0x99,0x2b,0x3f,
|
|
||||||
0x05,0xdf,0x01,0x3f,0x0d,0x7f,0x8d,0x4f,0x23,0xcb,0x10,0x5f,0x1f,0x9f,0x05,0xb0,
|
|
||||||
0x2f,0xee,0x1d,0xe5,0x4c,0x2f,0x27,0xb3,0x43,0xc1,0x00,0x2f,0x15,0xd1,0x19,0x38,
|
|
||||||
0x31,0xe0,0x37,0xf8,0x8e,0x1f,0xb2,0x7f,0x27,0xe7,0xa1,0x1f,0x14,0x71,0x15,0x57,
|
|
||||||
0x01,0x1f,0x1d,0x7d,0x60,0x01,0x3c,0xbf,0x70,0x01,0x0e,0x73,0x26,0x0f,0xfb,0xff,
|
|
||||||
0x03,0xff,0x0b,0x72,0x1f,0x0f,0x7c,0xcb,0x57,0xa7,0x16,0x1a,0x1e,0x65,0x83,0xff,
|
|
||||||
0x00,0x5f,0x00,0x32,0x00,0xa1,0x37,0x7b,0x01,0x01,0x1a,0xbd,0x0c,0xf0,0x0d,0x5f,
|
|
||||||
0x01,0xc1,0xeb,0x9f,0x00,0xdf,0x10,0x01,0x0e,0x3e,0x2f,0xdb,0x0e,0x84,0x2c,0x2f,
|
|
||||||
0x02,0xe1,0x00,0x99,0x4b,0xff,0x03,0xf5,0x3f,0x6f,0x24,0xef,0x2b,0x16,0x20,0x01,
|
|
||||||
0x0b,0x6f,0x18,0x8d,0x10,0x67,0x53,0xff,0x1c,0xc5,0x1b,0x3a,0x02,0x2f,0x5e,0xaf,
|
|
||||||
0x1a,0x88,0x0d,0x5a,0x20,0x2f,0x4b,0xa5,0x2b,0x7f,0x15,0xed,0x1b,0xd7,0x30,0x01,
|
|
||||||
0x0d,0xea,0x3c,0x35,0x40,0x5f,0x29,0xbd,0xff,0x6f,0x27,0x8f,0x27,0x97,0x27,0x9b,
|
|
||||||
0x0d,0xea,0x30,0x8f,0x2c,0x93,0x4f,0x3f,0x1c,0x9f,0x10,0x01,0x03,0x4f,0x1f,0x93,
|
|
||||||
0x7f,0x9f,0x26,0x3f,0x1f,0x2d,0x20,0x01,0x00,0xbc,0xa9,0x23,0x03,0x9f,0x28,0x75,
|
|
||||||
0x90,0x01,0x0e,0xe1,0x59,0x7f,0x1d,0x7d,0x31,0xdf,0x1e,0x77,0x0b,0x3f,0x2d,0x77,
|
|
||||||
0xa0,0x03,0x0f,0x0a,0x20,0x01,0x1f,0xff,0x39,0xe4,0x6b,0x53,0x9e,0xaf,0x60,0xef,
|
|
||||||
0x41,0xaf,0x0e,0x7f,0x22,0x3f,0x62,0x3f,0x1f,0x35,0x1c,0x72,0x02,0x0f,0x1b,0x2d,
|
|
||||||
0xc2,0x9f,0x32,0x9f,0x21,0xc1,0x02,0x9f,0x12,0x6f,0x2d,0x0f,0x45,0x1f,0x02,0x6f,
|
|
||||||
0x2f,0x5d,0x0f,0x2f,0x2b,0x4e,0x2e,0xcb,0x39,0xb5,0x53,0x5f,0x3c,0x69,0x06,0x7e,
|
|
||||||
0x1b,0xa3,0x93,0xb4,0xa0,0x0f,0x04,0x2f,0x1e,0xfa,0x3a,0xcf,0x1e,0x24,0x5b,0xaf,
|
|
||||||
0x0f,0x6f,0x1f,0x9b,0x52,0x2f,0x2b,0xa2,0x1e,0x13,0x0a,0xaf,0x2f,0x65,0x3a,0xaf,
|
|
||||||
0x7b,0xa0,0x13,0xff,0x02,0x7f,0x2c,0xad,0x90,0x2f,0x2f,0x4f,0x19,0xed,0x00,0x8f,
|
|
||||||
0x10,0x2d,0x1a,0xa3,0x3f,0x68,0x1e,0x2c,0x13,0xf9,0x0a,0x4f,0x53,0xf7,0x09,0x1b,
|
|
||||||
0x10,0x09,0x1c,0xd3,0x1f,0xcf,0x08,0x3c,0x8f,0x9f,0x4d,0x1f,0x70,0x01,0x03,0x9f,
|
|
||||||
0x7d,0x1f,0x0e,0xb0,0x43,0xfb,0x0e,0xde,0x13,0xf9,0x8d,0x7f,0x3e,0xdd,0x25,0xaf,
|
|
||||||
0x03,0xff,0x00,0x8f,0x43,0xf5,0x23,0xfb,0x4e,0x6f,0x23,0xf3,0x40,0x03,0x0e,0x0f,
|
|
||||||
0x6e,0xad,0x02,0x6f,0xe2,0x3f,0x25,0x87,0x02,0x6f,0x16,0xff,0x64,0x4d,0x02,0x9b,
|
|
||||||
0x5e,0x0f,0x92,0x9b,0x22,0x6b,0x56,0x6b,0x06,0x6d,0x00,0xaf,0xff,0xde,0x26,0xc5,
|
|
||||||
0x12,0x45,0x3f,0x5f,0x26,0x09,0x1f,0x95,0x0a,0x78,0x09,0x8f,0x0d,0x82,0x0c,0x4f,
|
|
||||||
0x30,0x01,0x0e,0x51,0x0e,0x21,0x15,0x1a,0x8f,0xf4,0xaf,0xff,0x2e,0xe9,0x0e,0xa2,
|
|
||||||
0x1f,0x69,0x7c,0xcc,0x15,0xe3,0x0c,0x6f,0x30,0x01,0x00,0x2f,0x18,0xc5,0x6f,0xff,
|
|
||||||
0x3b,0x67,0x01,0xb2,0x20,0x07,0x20,0x0b,0x0f,0xff,0x86,0x83,0x4e,0x7f,0x90,0x01,
|
|
||||||
0x0a,0x23,0x17,0x43,0x65,0x63,0x2b,0xad,0x00,0x9f,0x34,0xd3,0x2c,0x10,0x1a,0x5b,
|
|
||||||
0x75,0xef,0x37,0x43,0x17,0xa1,0x49,0xe0,0x1b,0x0d,0x1c,0x65,0x20,0x27,0x0f,0xff,
|
|
||||||
0x48,0x03,0x4b,0x53,0x1c,0x63,0x30,0x31,0x0c,0xf3,0x12,0x49,0x30,0x58,0x35,0x63,
|
|
||||||
0x10,0x2d,0x0a,0xe1,0x19,0x8f,0x10,0x09,0x0f,0xff,0xd0,0x01,0x0f,0xff,0x10,0xa6,
|
|
||||||
0x20,0x01,0x2b,0xf2,0x03,0x50,0x72,0x1d,0x4f,0xff,0x1a,0x2f,0x00,0xfd,0x0c,0x00,
|
|
||||||
0x22,0x47,0x1f,0xd9,0x05,0x02,0x0f,0xff,0x21,0xa7,0x10,0x01,0x32,0x2b,0x0f,0xff,
|
|
||||||
0x53,0xfb,0x14,0x01,0x1e,0x9b,0x0f,0xff,0x80,0x2f,0x1e,0xcb,0x0f,0xff,0xdf,0xff,
|
|
||||||
0x05,0xb2,0x33,0xf7,0x1a,0xdf,0x99,0xb0,0x08,0xd1,0x2f,0x63,0x3e,0x29,0x33,0xfb,
|
|
||||||
0x1f,0x0f,0x0a,0x7f,0x10,0x1e,0x23,0x97,0x4b,0x3f,0x63,0x67,0x07,0x18,0x10,0x8f,
|
|
||||||
0x40,0x5f,0x0f,0xd2,0x1d,0x5d,0x4c,0x4f,0x5a,0x7d,0x0e,0xeb,0x1b,0xc9,0x1c,0x92,
|
|
||||||
0x16,0x8e,0xc4,0x49,0x06,0xd2,0x21,0xc3,0x8f,0xeb,0x1c,0xc3,0x07,0x02,0x0f,0xfd,
|
|
||||||
0x03,0xfd,0x23,0xfb,0x14,0xaa,0x09,0xad,0x25,0x73,0x87,0x67,0x1c,0x01,0x4f,0xff,
|
|
||||||
0x05,0x2b,0x00,0x60,0x20,0x01,0x09,0x1d,0x10,0x8d,0x2c,0x8f,0x00,0x7b,0x20,0x01,
|
|
||||||
0xac,0x51,0x0d,0xbe,0x7e,0x90,0x7f,0xfb,0x36,0x21,0x4f,0xff,0x90,0x01,0x04,0x2f,
|
|
||||||
0x10,0x2f,0x04,0x2f,0x0b,0xaf,0xa4,0x4e,0x0a,0xbf,0x13,0x79,0x2f,0xff,0x1f,0xa1,
|
|
||||||
0x27,0x6f,0x09,0x8d,0x16,0x2b,0x98,0xff,0x0b,0x1a,0x8f,0xf4,0x8f,0xff,0x1f,0xe3,
|
|
||||||
0x0a,0x18,0x10,0xbf,0xc0,0xbf,0x0a,0x1f,0x11,0x1e,0x0a,0x9f,0x4f,0x49,0x07,0x16,
|
|
||||||
0x6f,0xff,0x49,0x19,0x03,0x17,0xab,0xbd,0x07,0xcb,0x0b,0xf8,0x7c,0x98,0x07,0x77,
|
|
||||||
0x29,0xb5,0x69,0xaf,0x02,0xd0,0x8f,0xf8,0x1a,0x57,0x0b,0x6f,0x2f,0xa5,0x10,0x31,
|
|
||||||
0x0f,0x5f,0x20,0x01,0x1d,0x2b,0x3a,0xdd,0x8f,0xff,0x17,0xe5,0x2b,0x3f,0x15,0xe4,
|
|
||||||
0x18,0x38,0x42,0x54,0x18,0x05,0x0e,0xef,0x1b,0xf1,0x0f,0xff,0x10,0x29,0x18,0xd5,
|
|
||||||
0x11,0x2f,0x18,0xdd,0x1c,0x3d,0x10,0x01,0x10,0x09,0x6f,0xff,0x0e,0x4b,0x33,0xf3,
|
|
||||||
0x14,0xc2,0x1a,0xb9,0x0b,0xcf,0x0f,0x5f,0x0e,0x95,0x11,0x03,0x0f,0xf4,0x26,0xdd,
|
|
||||||
0xc3,0xc5,0x0f,0x04,0x87,0x07,0x6f,0xb3,0x0f,0x32,0x60,0x01,0x0f,0xe0,0x51,0x89,
|
|
||||||
0x5f,0xff,0x15,0xdd,0x95,0xdd,0x19,0xc5,0xaa,0xf7,0xc0,0x2f,0xc0,0x2f,0x06,0x0e,
|
|
||||||
0x43,0xf5,0x6f,0xff,0x09,0x7f,0x3b,0x29,0x13,0x07,0x3e,0x63,0x1f,0x69,0x1d,0x5d,
|
|
||||||
0x0e,0x0f,0x1e,0x5e,0x13,0xfe,0x1d,0x29,0xaf,0xff,0x0a,0x75,0x1f,0xc9,0x13,0x8b,
|
|
||||||
0x1f,0xff,0xa5,0x8d,0x0d,0x5b,0x5e,0x1b,0x48,0xcf,0x68,0xcf,0x14,0x1f,0x17,0xfd,
|
|
||||||
0x2f,0xcb,0x1e,0xe9,0x0b,0x9e,0x30,0xff,0x1c,0xa8,0x19,0x38,0x0c,0x63,0x25,0x23,
|
|
||||||
0x17,0x9d,0x2b,0xa5,0x30,0x5f,0x16,0xe5,0x9b,0x7f,0x2f,0x81,0x0e,0x57,0x2b,0xcf,
|
|
||||||
0xcb,0xcf,0x1e,0xb1,0x0b,0x4d,0x00,0x82,0x01,0x35,0x4f,0x2f,0x1f,0x13,0x1b,0xf1,
|
|
||||||
0x0f,0x31,0x1c,0x27,0x0f,0x9c,0x5f,0x5f,0x83,0x60,0x06,0xa9,0x13,0x6b,0x8f,0xf6,
|
|
||||||
0x14,0xb6,0x0f,0x19,0x4f,0x02,0xba,0x8b,0x11,0x10,0x0e,0x91,0x0e,0xe0,0xac,0xce,
|
|
||||||
0x0d,0xc6,0x75,0x4f,0x01,0x21,0xcf,0xf3,0x19,0x2a,0x0a,0x53,0xa0,0x4f,0x0f,0xe2,
|
|
||||||
0x19,0x77,0xe0,0x5f,0x07,0x40,0x1d,0x1d,0x79,0x4f,0x32,0x89,0x0f,0xa4,0x20,0x01,
|
|
||||||
0x6f,0xff,0x30,0x01,0x0f,0x93,0x1f,0xd7,0x59,0x64,0x9f,0xc6,0x1d,0xf1,0x4e,0x0f,
|
|
||||||
0x19,0xac,0x0f,0xe6,0x1a,0x68,0x82,0x7d,0x1a,0x79,0x0c,0x5f,0x00,0xef,0xaf,0xff,
|
|
||||||
0x80,0xef,0x7a,0x45,0x7f,0xf1,0xc8,0xbb,0x10,0x0f,0xb8,0x8b,0x67,0xfb,0x27,0xbd,
|
|
||||||
0x0a,0x71,0xc0,0x81,0x0a,0xf3,0x0f,0xff,0x18,0xd1,0x29,0x8d,0x1f,0xa1,0x4b,0x05,
|
|
||||||
0x2f,0x5b,0x0b,0x11,0x12,0xd3,0x44,0xf6,0x18,0x01,0x15,0x07,0x2b,0x45,0x03,0xf1,
|
|
||||||
0x1f,0xff,0x3b,0xff,0x02,0xcf,0xb3,0xc5,0x2c,0x85,0x1c,0xc3,0x0c,0x6e,0x19,0x8f,
|
|
||||||
0x3d,0xf3,0x1c,0xdd,0x0f,0xfc,0x5a,0x27,0x30,0x01,0x0d,0xcf,0x41,0x1b,0x16,0x23,
|
|
||||||
0x0c,0xb3,0x43,0xf5,0x46,0x19,0x03,0xff,0x19,0x1b,0x1c,0xbe,0x33,0xf9,0x21,0x97,
|
|
||||||
0x10,0x8d,0x0c,0xc2,0x10,0x01,0x4d,0x76,0x13,0xa7,0x40,0x01,0xa9,0xd7,0x0a,0x9b,
|
|
||||||
0x1d,0xc9,0x8a,0xc7,0x0d,0x81,0xeb,0xfb,0x1f,0x4e,0x20,0x01,0x0f,0xd3,0xec,0x4f,
|
|
||||||
0x0c,0xf7,0x10,0xef,0x50,0x01,0xe0,0xef,0x04,0x56,0x09,0x1f,0x1e,0xa5,0x20,0x09,
|
|
||||||
0x15,0x80,0x0e,0xf3,0x71,0x7b,0x0f,0x12,0xcb,0x0f,0x2d,0x7d,0x0b,0x5f,0x70,0x01,
|
|
||||||
0x6f,0x87,0x40,0x99,0x0f,0x3d,0x43,0xf7,0x30,0x01,0x0f,0xe1,0x1c,0x8b,0x1c,0x5f,
|
|
||||||
0x29,0x60,0x0d,0x89,0x5f,0xdc,0x16,0xd5,0xa2,0x1b,0x0f,0xfe,0x19,0x7c,0x7f,0xff,
|
|
||||||
0x0f,0xff,0x25,0x49,0x10,0x01,0x31,0x1f,0x01,0x1f,0x70,0x01,0x0f,0xd5,0x14,0x7f,
|
|
||||||
0x3d,0x81,0x1a,0x7f,0x1e,0x58,0x1a,0x83,0x0c,0xc0,0x17,0xf5,0x1e,0xab,0x3d,0xad,
|
|
||||||
0x18,0x36,0x21,0x21,0x27,0xa5,0x17,0xf9,0x0e,0x79,0x15,0x71,0x19,0x39,0x18,0x03,
|
|
||||||
0x1f,0x3d,0x18,0x04,0x1e,0xe9,0x78,0x9e,0x0f,0xc6,0x0d,0xa5,0x10,0xef,0xa0,0xef,
|
|
||||||
0x21,0x88,0x00,0xef,0x0e,0xa0,0x1d,0x53,0x88,0x5f,0x29,0x80,0x13,0xff,0x0e,0x9d,
|
|
||||||
0x1f,0xd5,0xb5,0x2f,0x0f,0x12,0x0f,0x30,0x9b,0x9f,0x1b,0xac,0x0f,0xa2,0x02,0xf6,
|
|
||||||
0xaf,0xff,0x0d,0xb7,0xc0,0x2f,0x03,0x65,0xaa,0x10,0x24,0xdb,0x00,0x2f,0xa6,0xf0,
|
|
||||||
0x00,0x9d,0xd7,0x20,0x0a,0xd5,0x1a,0x39,0x56,0x4d,0x3c,0x8d,0x1d,0x88,0x25,0x63,
|
|
||||||
0x0e,0x6f,0x20,0x31,0x60,0x2f,0x1e,0x7e,0x4d,0xa8,0x0e,0x9f,0x18,0x19,0x25,0x10,
|
|
||||||
0x40,0x5f,0x30,0x5d,0x19,0xab,0x0e,0xcf,0x1d,0x49,0x70,0xbf,0x0e,0xff,0x30,0x01,
|
|
||||||
0x43,0xad,0x17,0x83,0x20,0x01,0x2d,0x1b,0x00,0xef,0x1c,0xed,0x1b,0x5f,0x11,0xdf,
|
|
||||||
0x1e,0x74,0x19,0x3f,0x15,0xb1,0x0c,0x95,0xd8,0xd5,0xcf,0xf8,0xda,0x7e,0x5c,0x5f,
|
|
||||||
0x51,0xc0,0x0a,0x0f,0x8d,0xd5,0x04,0xeb,0x1b,0x99,0x60,0x01,0x1b,0x2f,0x70,0x01,
|
|
||||||
0x0e,0xa9,0x20,0x01,0x1b,0x9d,0x1e,0x56,0xb0,0x01,0x0f,0xff,0x20,0x01,0x08,0x84,
|
|
||||||
0xab,0xcf,0x40,0x01,0x0f,0x98,0x8b,0x0f,0x6f,0x63,0x0b,0x0f,0x1f,0x48,0x13,0x00,
|
|
||||||
0x67,0x1a,0x2b,0x65,0x1f,0x22,0xf1,0x4d,0x70,0x01,0x00,0x2f,0xcf,0xcf,0x1d,0xbf,
|
|
||||||
0x1e,0xc3,0x19,0x2f,0x95,0x80,0x1e,0x1f,0x1d,0x3a,0x33,0xf3,0x1e,0x3b,0x2e,0xd5,
|
|
||||||
0x62,0x45,0x0e,0xdd,0x23,0xfb,0x1e,0x3b,0x18,0xb7,0x1f,0x7a,0x00,0x2f,0x1e,0x5e,
|
|
||||||
0x40,0x2f,0x60,0x2f,0x00,0x2f,0x00,0x2f,0x20,0x5f,0x50,0x5f,0x40,0x5f,0x00,0x8f,
|
|
||||||
0x30,0xe9,0x14,0x8f,0x10,0x33,0x1e,0x6f,0x10,0x2b,0x1f,0x17,0x00,0x2f,0x40,0xf1,
|
|
||||||
0x70,0x2f,0x40,0x2f,0x00,0x2f,0xd0,0x8f,0x1f,0x8d,0x1d,0xe3,0x10,0x00,0x1e,0xd1,
|
|
||||||
0xcf,0x93,0x1e,0x61,0x3f,0x2f,0x1e,0x11,0xab,0x8a,0x00,0x00,0x44,0x01,0x1e,0x9d,
|
|
||||||
0x1a,0xa7,0x1e,0xe9,0x0c,0x00,0x4f,0xfe,0x15,0xf1,0xa3,0xff,0x08,0x6f,0x1f,0xcb,
|
|
||||||
0x00,0x85,0x08,0x67,0x10,0x8d,0x19,0x50,0x1b,0x0d,0xf1,0xe5,0xb2,0xdf,0x13,0x39,
|
|
||||||
0x3f,0xeb,0x1b,0x17,0x7b,0x19,0xac,0xfd,0xd0,0x2f,0x1c,0x2e,0x11,0x01,0x3f,0xaf,
|
|
||||||
0x6b,0xc9,0x62,0x2a,0x1d,0xe1,0x20,0x63,0x3d,0xdf,0x20,0x2b,0x4d,0xef,0x23,0xf3,
|
|
||||||
0x10,0x01,0x5d,0x61,0x25,0xd7,0x66,0x7d,0x04,0xef,0x22,0xb1,0x27,0x3e,0x12,0xde,
|
|
||||||
0x1c,0xc4,0x50,0x10,0x00,0x2f,0x10,0x61,0x70,0x2f,0x00,0x2f,0x00,0x2f,0x10,0x5f,
|
|
||||||
0x80,0x5f,0x1d,0x54,0x00,0x8f,0x15,0x71,0x12,0x3f,0x4c,0xad,0x34,0x30,0xcc,0xbe,
|
|
||||||
0x80,0x2f,0xc0,0x2f,0x00,0x2f,0x60,0x8f,0x53,0x23,0x43,0xfb,0x9f,0x9f,0x7f,0x6f,
|
|
||||||
0x1e,0x07,0x1e,0x6f,0x1e,0x06,0x32,0x41,0x0d,0xa1,0x1e,0x4b,0x39,0x91,0x86,0x0b,
|
|
||||||
0x2f,0x41,0x08,0x3f,0x19,0xbd,0x60,0x2f,0x59,0x8d,0x00,0x2f,0x10,0x2d,0x80,0x2f,
|
|
||||||
0x19,0xf1,0x00,0x5f,0x20,0x01,0x70,0x2f,0x44,0xff,0x22,0x2d,0x00,0xbe,0x1a,0x6c,
|
|
||||||
0x04,0x93,0x3f,0x2d,0x00,0x2f,0x10,0x5d,0x00,0x5f,0x20,0x01,0x00,0x8f,0x9f,0xf8,
|
|
||||||
0xcf,0xff,0x0d,0xab,0x21,0xaf,0x4f,0x86,0x1c,0x00,0x07,0x3f,0x39,0x1c,0x5f,0xcd,
|
|
||||||
0x5a,0x1f,0x1b,0x67,0x1a,0x1f,0x0a,0x15,0x1b,0xa1,0x1b,0xf1,0x22,0x1e,0x1a,0xa9,
|
|
||||||
0x2e,0x87,0x11,0x67,0x0b,0xcf,0x1f,0x43,0x20,0x2f,0x1a,0xd7,0x17,0x0f,0x00,0x2f,
|
|
||||||
0x4b,0x6f,0x1e,0xe8,0x30,0x5f,0x1e,0x6b,0x4b,0x6f,0x00,0x5f,0x8b,0x6f,0x1f,0xa5,
|
|
||||||
0x27,0xe2,0x20,0x01,0x00,0x8f,0x9f,0xff,0xfe,0xa1,0x0f,0x06,0x40,0x8f,0x6f,0xea,
|
|
||||||
0x04,0xc2,0x21,0x4f,0x4b,0x99,0x3f,0x20,0x1c,0x91,0x2f,0xbc,0x0f,0xd3,0x1b,0x99,
|
|
||||||
0x40,0x2f,0x1f,0xd3,0x5d,0xd9,0x00,0x2f,0x20,0x2d,0x27,0xc7,0x20,0x5f,0x3c,0xef,
|
|
||||||
0x1b,0x45,0x00,0x5f,0x20,0x01,0x23,0x20,0xec,0x9e,0x0f,0xff,0x50,0x01,0x9c,0x31,
|
|
||||||
0x00,0x2f,0x67,0xa0,0x20,0x2f,0x00,0x2f,0x00,0x5f,0x00,0x2f,0xd0,0x01,0x0f,0xff,
|
|
||||||
0x00,0x2f,0x13,0xf1,0x4e,0x4d,0x14,0x03,0x1f,0x17,0x11,0xd6,0x45,0x5d,0x2b,0x99,
|
|
||||||
0x1f,0x1d,0x1b,0xff,0x60,0x01,0xfb,0x3f,0x26,0xdd,0x3d,0x75,0x26,0xe1,0x1d,0x7c,
|
|
||||||
0x1a,0xf5,0xef,0x9c,0x17,0x71,0x17,0xd5,0x1d,0xb7,0x1a,0x4f,0x27,0x0d,0x62,0x24,
|
|
||||||
0x00,0x2f,0x40,0x2f,0x12,0xab,0x00,0x2f,0x30,0x8f,0x38,0x65,0x1e,0x3f,0x1f,0xdb,
|
|
||||||
0x00,0x8f,0x3d,0x6b,0x10,0xb3,0x15,0x49,0x2c,0x67,0x18,0xa1,0x1b,0x41,0x21,0x3f,
|
|
||||||
0x00,0xbf,0x11,0x68,0xf0,0xef,0x20,0xe5,0xa0,0x03,0xc0,0x01,0x00,0x2f,0xd0,0x01,
|
|
||||||
0x00,0x8f,0x00,0x3f,0x98,0x5f,0x0b,0x9e,0x00,0x2f,0x83,0xff,0x0f,0xfa,0x00,0x2f,
|
|
||||||
0x56,0xdb,0x17,0xf9,0x4b,0x10,0x1f,0xf8,0x49,0xee,0x1f,0x65,0xa9,0xc9,0x6d,0x20,
|
|
||||||
0x4b,0x3f,0x04,0xef,0x33,0x11,0x1a,0x25,0x45,0x76,0x0c,0x5e,0x1f,0x55,0x13,0x3f,
|
|
||||||
0x24,0x85,0x55,0x60,0x00,0x2f,0xa0,0x2f,0x30,0x2f,0x00,0x2f,0x1c,0x29,0xf0,0x2f,
|
|
||||||
0x20,0x2f,0x00,0x8f,0x20,0x8f,0x10,0x8f,0x07,0x6a,0x86,0xdf,0x14,0xef,0x0f,0x07,
|
|
||||||
0x1c,0x97,0x1f,0x5a,0x60,0xbf,0x00,0xef,0x25,0x13,0x71,0x4f,0x23,0xff,0x01,0x4f,
|
|
||||||
0x30,0x2f,0xc0,0x2f,0x00,0x5f,0xf0,0x2f,0x20,0x2f,0x00,0x2f,0x24,0xf1,0xa0,0x5f,
|
|
||||||
0x50,0x2f,0x0f,0xfa,0x38,0x71,0x21,0x5c,0x08,0x9f,0x9f,0xff,0x0f,0x91,0xcf,0xf8,
|
|
||||||
0x00,0xa3,0x1b,0xd6,0x1c,0xd9,0xb6,0x6f,0x2c,0x95,0x0b,0xd6,0xad,0x81,0x0f,0xdf,
|
|
||||||
0x5c,0x95,0xc0,0x5d,0x0a,0x1a,0x9e,0x09,0x0f,0xff,0x20,0x01,0x8f,0xff,0x4d,0xc9,
|
|
||||||
0x0f,0xd6,0x1f,0x93,0x6f,0xf6,0x17,0xf1,0x09,0xbe,0x00,0x1f,0x4e,0x15,0x01,0x7f,
|
|
||||||
0x4e,0x15,0x9c,0x50,0x01,0x7f,0x6e,0x15,0x01,0x4f,0x7e,0x15,0x0d,0x80,0x2e,0x15,
|
|
||||||
0x0d,0xaf,0x4e,0x15,0x0d,0xe0,0x4e,0x15,0x0e,0x10,0x1d,0xab,0x89,0x6f,0x1d,0xe1,
|
|
||||||
0x02,0x9f,0x02,0x9f,0x0f,0x0b,0x15,0xef,0x2a,0x11,0x2c,0x62,0x15,0xc4,0x39,0x31,
|
|
||||||
0x08,0x2f,0x18,0x2b,0x8a,0x0e,0x1e,0x45,0x14,0xe3,0x10,0x01,0xfe,0x1f,0x3b,0xa3,
|
|
||||||
0x1e,0x82,0x1a,0x29,0x19,0xc2,0x19,0xcf,0x0e,0x4d,0x23,0xc3,0x2d,0x01,0x1d,0x61,
|
|
||||||
0x0a,0xae,0x1f,0x0d,0xc0,0x2f,0xb0,0x2f,0x03,0x95,0x30,0x5f,0x50,0x5f,0x1e,0xdf,
|
|
||||||
0x70,0x2d,0x00,0x5f,0xc0,0x8f,0x1f,0x35,0x4d,0x91,0x00,0x8f,0x1e,0x11,0x10,0xbf,
|
|
||||||
0x10,0xbf,0x34,0xe5,0x2b,0x6e,0x00,0xbf,0x1f,0x91,0xa0,0x8f,0x40,0xef,0x20,0xed,
|
|
||||||
0x00,0x2f,0x2e,0x20,0x3d,0x1e,0x7d,0x2e,0x1f,0xe5,0x20,0x01,0x4d,0xe5,0x2e,0x43,
|
|
||||||
0x11,0x77,0x7f,0x17,0x0f,0xcd,0x50,0xbf,0x1f,0x7a,0x04,0xef,0x25,0x64,0x40,0x2f,
|
|
||||||
0x10,0x2f,0x90,0x2f,0x00,0x2f,0x21,0x7f,0x20,0x2f,0x50,0x2f,0x61,0x7f,0x1e,0x55,
|
|
||||||
0x00,0x2f,0x31,0x4f,0x20,0x2f,0x10,0x8f,0x51,0x4f,0x00,0x2f,0x20,0x8f,0x5e,0xa1,
|
|
||||||
0x2e,0xa9,0x0e,0xff,0x27,0x25,0x0e,0x3f,0x00,0x2f,0x1f,0x95,0x00,0x2f,0x1f,0xf7,
|
|
||||||
0x16,0x9b,0x1c,0xb7,0x2c,0xc8,0x19,0x99,0xf6,0xd2,0x19,0xa5,0x3f,0x97,0x42,0x9f,
|
|
||||||
0x4d,0xb2,0x0e,0x7f,0x70,0x01,0x2f,0xf9,0x70,0x01,0x0c,0x2f,0x1f,0xf5,0x4e,0x0a,
|
|
||||||
0x30,0x2e,0x13,0xfb,0x0f,0x6f,0x23,0xfb,0x47,0x15,0x34,0x25,0x00,0x35,0x24,0x2b,
|
|
||||||
0x3a,0xa0,0x43,0x37,0x0c,0xbf,0x30,0x2f,0x00,0x2f,0x2e,0xcc,0xf0,0x5f,0x00,0x2f,
|
|
||||||
0x00,0x2f,0x21,0x87,0xc0,0xbf,0x00,0x2f,0x1c,0x01,0x3b,0xc0,0x7b,0xd0,0x9c,0x31,
|
|
||||||
0x1a,0x79,0x1f,0xbf,0x21,0xaa,0x15,0xad,0x01,0xdb,0x3b,0x5e,0x17,0x09,0x6a,0xaf,
|
|
||||||
0x14,0x23,0x35,0xad,0x00,0x2f,0x00,0x5f,0x2c,0xc1,0x00,0x2f,0x02,0x9f,0x83,0xf9,
|
|
||||||
0x0e,0x0f,0x00,0x2f,0x4c,0x2f,0x6d,0xaf,0x14,0x07,0x00,0xef,0x00,0x9f,0xbe,0x89,
|
|
||||||
0xaf,0xf4,0x0a,0x7f,0x1e,0xa7,0x09,0xef,0xab,0x9d,0x08,0xcf,0xcb,0x6f,0x17,0xbb,
|
|
||||||
0x0b,0x6f,0x1c,0xf9,0x9c,0xaf,0x30,0x01,0x0c,0x90,0xcf,0xff,0x0b,0x6f,0x01,0x4f,
|
|
||||||
0x01,0x4f,0x03,0xa7,0x1f,0xcd,0x11,0x4f,0xc1,0x4f,0x0a,0xbf,0x20,0x01,0x8f,0xf4,
|
|
||||||
0x09,0x1f,0x01,0xdf,0x0c,0xa9,0x20,0x01,0x0b,0xcf,0x00,0x18,0x0e,0x19,0x29,0xef,
|
|
||||||
0x19,0xef,0x1b,0xf5,0x89,0xef,0x0b,0x9f,0xc0,0x2f,0xb0,0x2f,0x0b,0xff,0x30,0x5f,
|
|
||||||
0x50,0x5f,0x1a,0x73,0x00,0x2f,0xb0,0x2f,0x68,0xcf,0x20,0x8f,0x00,0x5f,0x2a,0x10,
|
|
||||||
0x1f,0xc9,0x4a,0xe3,0x4b,0x6f,0x2d,0x3c,0x2c,0x91,0x09,0x60,0x43,0xf3,0x2f,0x95,
|
|
||||||
0x4d,0x92,0xce,0xed,0x79,0x01,0x20,0x5f,0x2d,0x69,0x2a,0xdb,0x0f,0xff,0x1e,0x4b,
|
|
||||||
0x60,0x01,0xd0,0x0f,0x01,0x4f,0xe0,0x1f,0x2d,0x21,0x50,0x01,0xf3,0xc5,0x11,0x4f,
|
|
||||||
0xa0,0x5f,0x1b,0xc3,0x5d,0x8b,0x8e,0x2e,0xb1,0x1f,0xa0,0x8f,0x40,0x5f,0x00,0x2f,
|
|
||||||
0x22,0x00,0x1d,0xcd,0x4e,0x15,0x30,0xcf,0x1b,0x7b,0x1d,0x7b,0x05,0x1f,0x50,0xab,
|
|
||||||
0x5f,0xf2,0x1d,0xe5,0x1e,0x57,0x0d,0x1f,0x10,0x5f,0x6e,0x75,0x2d,0x1f,0x32,0x17,
|
|
||||||
0x00,0x5f,0x04,0x10,0x05,0x21,0x1b,0x0b,0x23,0x29,0x79,0xef,0x23,0xc3,0x09,0x8f,
|
|
||||||
0x20,0x2f,0xb0,0x2f,0x00,0x2f,0x00,0x2f,0x09,0xef,0x2d,0x89,0x14,0x79,0x2a,0x7f,
|
|
||||||
0x50,0x5f,0x09,0xef,0x34,0x17,0x6a,0xaf,0x10,0xbf,0x0a,0xaf,0xa4,0x03,0x64,0xd0,
|
|
||||||
0x26,0x79,0x07,0xc4,0x2b,0x10,0x01,0x1f,0x33,0xf9,0x10,0x8f,0x1f,0x99,0x60,0x0f,
|
|
||||||
0x00,0x2f,0x50,0x2f,0x23,0xf9,0x00,0x2f,0x70,0x2f,0x1f,0xd7,0x1f,0x97,0x00,0x2f,
|
|
||||||
0x1f,0xe8,0x11,0xb0,0x19,0x0e,0x18,0x85,0x06,0x06,0x7e,0x0f,0x64,0xad,0x2d,0xdd,
|
|
||||||
0x0f,0x77,0x2e,0xd0,0xa0,0x5f,0x1e,0x73,0x07,0xf7,0x09,0x08,0x0a,0x19,0x0b,0x2a,
|
|
||||||
0x0c,0x3b,0x0d,0x4c,0x0e,0x5d,0x0f,0x6e,0x0c,0x7f,0x0d,0x90,0x0e,0xa1,0x0f,0xb2,
|
|
||||||
0x0c,0xcb,0x0d,0xdc,0x0e,0xed,0x0f,0xfe,0x0f,0xff,0x0f,0xff,0x0f,0xff,0x0f,0xff,
|
|
||||||
0x0f,0xff,0x0f,0xff,0x0f,0xff,0x0f,0xff,0x0f,0xff,0x0f,0xff,0x0f,0xff,0x0f,0xff,
|
|
||||||
0x0f,0xff,0x0f,0xff,0x0f,0xff,0x0f,0xff,0x0f,0xff,0x0f,0xff,0x0f,0xff,0x0f,0xff,
|
|
||||||
0x0f,0xff,0x0f,0xff,0x0f,0xff,0x0f,0xff,0x0f,0xff,0x0f,0xff,0x0f,0xff,0x0f,0xff,
|
|
||||||
0x0f,0xff,0x0f,0xff,0x0f,0xff,0x0f,0xff,0x0f,0xff,0x0f,0xff,0x0f,0xff,0x0f,0xff,
|
|
||||||
0x0f,0xff,0x0f,0xff,0x0f,0xff,0x0f,0xff,0x0f,0xff,0x0f,0xff,0x0f,0xff,0x0f,0xff,
|
|
||||||
0x0f,0xff,0x0f,0xff,0x0f,0xff,0x0f,0xff,0x0f,0xff,0x0f,0xff,0x0f,0xff,0x0f,0xff,
|
|
||||||
0x0f,0xff,0x0f,0xff,0x0f,0xff,0x0f,0xff,0x0f,0xff,0x0f,0xff,0x0f,0xff,0x0f,0xff,
|
|
||||||
0x0f,0xff,0x0f,0xff,0x0f,0xff,0x0f,0xff,0x0f,0xff,0x0f,0xff,0x0f,0xff,0x0f,0xff,
|
|
||||||
0x0f,0xff,0x0f,0xff,0x0f,0xff,0x0f,0xff,0x0f,0xff,0x0f,0xff,0x0f,0xff,0x0f,0xff,
|
|
||||||
0x0f,0xff,0x0f,0xff,0x0f,0xff,0x0f,0xff,0x0f,0xff,0x0f,0xff,0x0f,0xff,0x0f,0xff,
|
|
||||||
0x0f,0xff,0x0f,0xff,0x0f,0xff,0x0f,0xff,0x0f,0xff,0x0f,0xff,0x0f,0xff,0x0f,0xff,
|
|
||||||
0x0f,0xff,0x0f,0xff,0x0f,0xff,0x0f,0xff,0x0f,0xff,0x0f,0xff,0x0f,0xff,0x0f,0xff,
|
|
||||||
0x0f,0xff,0x0f,0xff,0x00,0x00,0x00,0x20,0x00,0xff,0x18,0x18,0x00,0x1c,0x18,0x00,
|
|
||||||
0x02,0x00,0x00,0x15,0x00,0x0b,0x02,0x30,0x00,0x00,0x01,0x10,0x55,0xaa,0xff,0x0c,
|
|
||||||
0x06,0x0b,0x12,0x10,0x16,0x13,0x06,0x0a,0x0a,0x0f,0x13,0x07,0x11,0x07,0x17,0x12,
|
|
||||||
0x0a,0x11,0x11,0x13,0x12,0x12,0x11,0x11,0x11,0x07,0x07,0x11,0x13,0x11,0x0f,0x14,
|
|
||||||
0x12,0x10,0x11,0x11,0x0e,0x0e,0x0b,0x10,0x0e,0x13,0x10,0x12,0x0f,0x12,0x11,0x10,
|
|
||||||
0x10,0x10,0x11,0x16,0x11,0x11,0x0f,0x0a,0x17,0x09,0x0d,0x18,0x07,0x0f,0x0f,0x0e,
|
|
||||||
0x0f,0x0f,0x0a,0x0f,0x0e,0x07,0x09,0x0e,0x07,0x13,0x0f,0x0a,0x0d,0x0b,0x0e,0x0f,
|
|
||||||
0x13,0x0f,0x0e,0x0d,0x0a,0x05,0x0a,0x15,0x18,0x14,0x18,0x06,0x0f,0x0b,0x15,0x0e,
|
|
||||||
0x0e,0x0d,0x17,0x18,0x0f,0x18,0x18,0x07,0x07,0x0b,0x0b,0x0f,0x12,0x0e,0x0b,0x13,
|
|
||||||
0x18,0x0d,0x11,0x06,0x0f,0x0c,0x17,0x0b,0x0e,0x12,0x0a,0x17,0x18,0x0b,0x12,0x0a,
|
|
||||||
0x0b,0x0a,0x0e,0x0e,0x08,0x08,0x07,0x0b,0x0e,0x14,0x14,0x15,0x10,0x12,0x13,0x13,
|
|
||||||
0x14,0x10,0x0f,0x06,0x14,0x10,0x11,0x11,0x12,0x10,0x11,0x0f,0x13,0x0e,0x10,0x0e,
|
|
||||||
0x0e,0x0e,0x0f,0x10,0x0e,0x00,0x27,0x29,0x00,0x3e,0x18,0x3e,0x0b,0x80,0x09,0x06,
|
|
||||||
0x00,0x0b,0x00,0x0f,0x41,0x90,0x42,0xe0,0x42,0xd0,0x09,0x1b,0x02,0xff,0x0f,0xeb,
|
|
||||||
0x90,0x00,0xfd,0x00,0xbf,0x09,0x06,0xf8,0x1f,0xfe,0x2e,0x0b,0x40,0x2e,0x6f,0x01,
|
|
||||||
0xff,0x03,0xe0,0xf4,0x00,0xbc,0x09,0x3f,0x17,0x18,0x00,0x7d,0x00,0xf8,0x02,0xe0,
|
|
||||||
0x16,0x09,0x00,0x0f,0x40,0x07,0xc0,0x18,0x0a,0x1d,0x01,0xa0,0xad,0x06,0x00,0x1f,
|
|
||||||
0x80,0x7e,0x00,0xf8,0x1b,0x00,0xbf,0x03,0xfd,0xf9,0x00,0xff,0x80,0x6f,0x0a,0x29,
|
|
||||||
0x00,0xbe,0x07,0xfe,0x19,0x2b,0x01,0xff,0x07,0xf9,0xe9,0x5f,0x0a,0x6b,0x02,0xff,
|
|
||||||
0x0b,0xf5,0xd0,0x5b,0xf0,0x18,0x06,0x80,0x1f,0xd0,0x7f,0xd0,0x3e,0x3e,0x00,0x2e,
|
|
||||||
0x0e,0x0e,0x03,0x0d,0x03,0x38,0x80,0x00,0x40,0x0c,0x0f,0x0b,0xff,0x0b,0xff,0x01,
|
|
||||||
0x7d,0x00,0x3c,0x00,0x78,0x15,0xb9,0x2f,0xff,0x03,0xc0,0xff,0x5b,0x95,0x0f,0x40,
|
|
||||||
0x0f,0x00,0x5e,0x54,0xff,0xf8,0x2f,0x4b,0x2e,0x0b,0x2f,0x4b,0x1f,0xeb,0x07,0xff,
|
|
||||||
0x00,0x6f,0x0b,0x0b,0xc0,0xe4,0x00,0xff,0x40,0x6f,0xc0,0x07,0x3d,0x0b,0x2f,0x6f,
|
|
||||||
0x0b,0xfe,0x01,0xa4,0x80,0x7c,0x81,0xf4,0x82,0xe0,0x4b,0x80,0x1f,0x00,0x7d,0x1f,
|
|
||||||
0xb8,0x7e,0xe0,0xe0,0x7d,0x00,0x03,0xd0,0x03,0xd0,0x02,0xf1,0x00,0xfb,0x00,0xbf,
|
|
||||||
0xdb,0x0f,0x42,0x7c,0x00,0x7c,0xe0,0xb4,0xd0,0xb4,0xf4,0x0f,0x00,0x0e,0x00,0x38,
|
|
||||||
0x19,0x03,0xd0,0x07,0x80,0x0b,0x0f,0xf4,0x00,0xb8,0x3c,0x00,0x2d,0x3c,0x0f,0x1f,
|
|
||||||
0x04,0x0f,0x2e,0x0f,0x3f,0xdf,0x06,0xff,0x00,0x7f,0x06,0xff,0x2f,0xdf,0x40,0x0b,
|
|
||||||
0x80,0x7f,0xc0,0xf9,0x00,0xd0,0xbf,0xc0,0x01,0x1a,0xaa,0x2f,0xff,0x1a,0xaa,0x00,
|
|
||||||
0x01,0xf4,0x00,0xfa,0xaa,0xff,0xff,0xfa,0xaa,0x40,0x10,0x0b,0x2a,0xaa,0x7f,0xff,
|
|
||||||
0x6a,0xaa,0xaa,0xa8,0xff,0xfc,0xaa,0xa8,0x3f,0x02,0x00,0x07,0x00,0x1f,0x00,0x7e,
|
|
||||||
0x01,0xf4,0x07,0xd0,0x2f,0x40,0xbd,0xe0,0x0b,0xe0,0x0f,0xc0,0x2f,0x40,0x2f,0x00,
|
|
||||||
0x40,0x02,0xf8,0x00,0xfc,0x00,0xbd,0x00,0x7e,0x3e,0x7f,0xfe,0x3e,0x7e,0x10,0x7e,
|
|
||||||
0x00,0x0d,0x0f,0xd0,0x1f,0x80,0x06,0x06,0x00,0x7f,0x01,0xfe,0x02,0xf4,0x02,0xf8,
|
|
||||||
0x02,0xf4,0x07,0xf0,0x6f,0xe0,0xff,0x40,0xf4,0x01,0x0f,0x80,0x01,0x15,0xf4,0x01,
|
|
||||||
0x5f,0xe0,0xff,0x80,0xff,0xe0,0x07,0x00,0x07,0x2e,0x00,0xb8,0x02,0xf0,0x0b,0xd0,
|
|
||||||
0x1f,0xaa,0xfb,0xd0,0xe7,0xd0,0x87,0xd0,0x07,0xab,0xea,0x80,0x2f,0x29,0x15,0x43,
|
|
||||||
0x2f,0xff,0x00,0xf0,0x01,0xe0,0x02,0xe0,0x02,0xd0,0x00,0xff,0xf8,0x3c,0x78,0x00,
|
|
||||||
0xb4,0x00,0x50,0x04,0x2f,0xeb,0x0b,0xff,0x00,0xbf,0x06,0xe0,0x03,0xe0,0x1b,0xd0,
|
|
||||||
0xff,0x80,0xf9,0x06,0x3d,0x00,0xb8,0x01,0xf0,0xc1,0xf0,0x41,0xf0,0x00,0xf0,0x00,
|
|
||||||
0xbe,0x00,0x7f,0x00,0x2e,0xbc,0x00,0x1f,0x0f,0x80,0x0b,0xfa,0x02,0xff,0x00,0x1a,
|
|
||||||
0xbe,0xf0,0x2f,0xe0,0x1f,0xf8,0xbf,0xff,0xf8,0x2f,0x40,0x40,0x27,0x0b,0x40,0x0b,
|
|
||||||
0x80,0x03,0xf4,0x1d,0x11,0x3c,0xf4,0x02,0xf0,0x07,0xd0,0x0f,0x40,0x12,0x2e,0x0f,
|
|
||||||
0x04,0x0f,0x1a,0x80,0x01,0x0c,0x01,0x07,0x80,0x07,0x80,0x03,0x40,0x0e,0x45,0x2f,
|
|
||||||
0x80,0x05,0x15,0xbd,0x02,0xf4,0x0b,0x80,0x2e,0xd0,0x0d,0x1f,0x80,0x0f,0xd0,0x07,
|
|
||||||
0xf4,0x02,0xfe,0x00,0xbd,0x01,0xfc,0x07,0xf4,0xbf,0xd0,0xff,0x40,0xa4,0x04,0x14,
|
|
||||||
0x12,0x07,0xf4,0x2f,0xff,0x2f,0xff,0x05,0x55,0xff,0xf8,0xff,0xf8,0x55,0x54,0x05,
|
|
||||||
0x00,0x2f,0x90,0x0b,0xfe,0xfc,0x02,0xf8,0xaf,0xf4,0xff,0x90,0x04,0xff,0xff,0xab,
|
|
||||||
0xea,0xc0,0x17,0x06,0xaa,0xaa,0xa0,0xff,0xf0,0xaa,0xa0,0x09,0x1b,0x09,0xab,0xf8,
|
|
||||||
0x0d,0xe4,0xd0,0x1b,0x0a,0x6f,0x07,0xff,0x1f,0xe5,0xe8,0x0e,0x60,0xb4,0x07,0x3b,
|
|
||||||
0x2d,0x00,0x2f,0x19,0x01,0xaf,0x0b,0xff,0x2f,0xd5,0xfe,0x00,0xbf,0x0a,0x02,0xbe,
|
|
||||||
0x90,0xaa,0xfd,0xa0,0x00,0x02,0xaa,0x1f,0xff,0x1f,0x90,0x0a,0x1a,0xfa,0x40,0xff,
|
|
||||||
0xe0,0x5b,0x09,0x2a,0xaa,0x3f,0xff,0x3f,0x50,0x40,0x0c,0x3e,0x00,0xff,0x00,0x01,
|
|
||||||
0x2f,0xa9,0xa9,0x00,0x38,0x0a,0x40,0xa4,0x01,0xf8,0x01,0xf8,0x19,0x14,0xc0,0x0f,
|
|
||||||
0x80,0x0f,0x85,0x1f,0xbf,0x1f,0xfe,0x2f,0xd0,0x05,0xa4,0xaf,0xf0,0xbc,0x00,0x2e,
|
|
||||||
0x2f,0x3e,0xbf,0x3f,0xe4,0x3f,0x50,0x40,0x00,0xfe,0x40,0xbd,0x09,0x03,0x0b,0x0b,
|
|
||||||
0xe0,0xbd,0xf0,0xd0,0x02,0x40,0xd0,0x3f,0xaf,0xbf,0xe0,0x06,0xf8,0x00,0x2f,0x40,
|
|
||||||
0x3f,0x0f,0xf5,0x6a,0x02,0xf0,0xfc,0x6f,0xfc,0xfe,0xbc,0xa4,0x1a,0x40,0x19,0x21,
|
|
||||||
0x2f,0x02,0xfe,0x1f,0xe4,0x2f,0x80,0x1f,0xe0,0x02,0xfe,0x7f,0xe0,0xfe,0x00,0x0e,
|
|
||||||
0x55,0xff,0xff,0x0b,0x80,0xbf,0x80,0x1f,0xf0,0x02,0xf4,0x1b,0xf4,0x00,0x3e,0x1f,
|
|
||||||
0x00,0x2f,0x7f,0x40,0xfd,0x81,0x0f,0x0b,0x2e,0x2f,0x2c,0x3e,0x3c,0x7c,0x3c,0xbc,
|
|
||||||
0x3c,0xbc,0x2d,0x7e,0xa4,0x07,0xfe,0xe2,0xaf,0xe1,0xc0,0x0b,0xc1,0x0b,0x82,0x5f,
|
|
||||||
0xd7,0xc0,0xe0,0x7d,0x00,0xfc,0x01,0xf4,0x02,0xfa,0x03,0xff,0xbd,0x2f,0x00,0xc0,
|
|
||||||
0xab,0xe0,0xff,0x1f,0x40,0xff,0xc0,0x0b,0x6f,0xff,0x80,0x1b,0xd0,0x03,0xe0,0x04,
|
|
||||||
0x1f,0x40,0x2f,0xb8,0x00,0x20,0x0c,0x2f,0xd0,0x07,0xe0,0xf4,0x02,0xff,0xfc,0x05,
|
|
||||||
0x55,0xa8,0x54,0x05,0x2f,0x6a,0xa8,0xbf,0xfc,0xaa,0xfc,0x00,0x02,0x20,0x1b,0x40,
|
|
||||||
0x2f,0xd0,0xff,0x00,0x16,0x05,0x0b,0xe0,0x03,0x00,0xbc,0x0a,0x1f,0x15,0x0a,0xbd,
|
|
||||||
0x02,0xfc,0x09,0x00,0x0a,0x0b,0xe0,0xbf,0xd0,0xfe,0x32,0x07,0x40,0x17,0x6f,0xe0,
|
|
||||||
0x00,0xfd,0x00,0xbf,0xd0,0x0b,0xf4,0x10,0x05,0xff,0x0b,0x00,0xbf,0x07,0xfd,0x2f,
|
|
||||||
0xd0,0x2e,0xf8,0x05,0x05,0x06,0x1e,0x2f,0x0f,0x4a,0xf9,0xff,0xff,0xe5,0xa9,0x00,
|
|
||||||
0x07,0x55,0x69,0x40,0xc0,0x07,0xea,0x2f,0x40,0x3f,0xab,0x7d,0x06,0x02,0xf0,0x03,
|
|
||||||
0xf0,0x1b,0xfe,0x06,0xc0,0xf8,0x6f,0x74,0x01,0xfc,0xef,0x07,0x01,0x15,0x03,0xf0,
|
|
||||||
0x0b,0xe0,0x7f,0xe4,0x0b,0x40,0xff,0x40,0x55,0x0c,0x15,0x2f,0x40,0xf4,0x7f,0xbc,
|
|
||||||
0x00,0xbc,0x01,0x09,0x0e,0x29,0x0a,0x0c,0x2f,0x06,0x90,0x18,0x0e,0x2a,0x40,0x3f,
|
|
||||||
0xc0,0x3f,0x2a,0xbf,0x08,0x0a,0x1f,0x01,0xa0,0x02,0xf0,0x02,0xf0,0x18,0x12,0x90,
|
|
||||||
0xff,0x0d,0x03,0x80,0x5b,0xe0,0x18,0x40,0xbf,0xc0,0x0a,0xe4,0x7f,0x80,0x0d,0xaf,
|
|
||||||
0x90,0xff,0xe0,0xea,0x09,0x29,0x00,0x90,0x03,0xe0,0x03,0x09,0x40,0x68,0xf8,0x0c,
|
|
||||||
0x69,0xbf,0x7d,0x0a,0x40,0x0b,0xd0,0x03,0xa4,0x09,0x1a,0xa4,0x02,0xf4,0x0b,0x40,
|
|
||||||
0x07,0x05,0x54,0x1f,0xfe,0x1f,0xa9,0x1e,0x17,0x18,0x00,0x2e,0x00,0x0b,0x80,0x02,
|
|
||||||
0x17,0x15,0x54,0x2f,0xfc,0x1a,0xbc,0x00,0x3c,0x15,0x69,0xff,0x0b,0xeb,0x2f,0x82,
|
|
||||||
0xe0,0x00,0x11,0x0f,0x02,0x2f,0x0b,0x2f,0x2f,0x2f,0xbe,0x2f,0xfe,0x8b,0x2f,0x80,
|
|
||||||
0xf4,0x09,0x2f,0x13,0x3f,0xe0,0x3e,0xf0,0x3e,0xf4,0x3e,0xb8,0x3e,0x7c,0x3e,0x3e,
|
|
||||||
0x3e,0x2f,0x3e,0x1f,0x00,0xff,0x01,0xff,0x02,0xfb,0x03,0xeb,0x07,0xcb,0x0b,0x8b,
|
|
||||||
0x0f,0x4b,0x5f,0x0b,0x1f,0xf8,0x1f,0xbd,0x1f,0xbe,0x1f,0x6f,0x1f,0x4f,0x1f,0x4b,
|
|
||||||
0x1f,0x43,0x1f,0x41,0x02,0xf0,0x42,0xf0,0xc2,0xf0,0xe2,0xf0,0xf2,0xf0,0xfa,0x07,
|
|
||||||
0x0f,0x80,0x01,0x3e,0x3f,0x2e,0xaa,0x1f,0x80,0xbf,0xa0,0x00,0xfc,0x7e,0x00,0x95,
|
|
||||||
0xea,0x0b,0xd0,0xaf,0xc0,0xff,0x40,0x02,0xf9,0x02,0x0b,0xbf,0x80,0x0f,0xd0,0x2e,
|
|
||||||
0x01,0x03,0x7e,0xf0,0x07,0x0f,0xc0,0x01,0x41,0x0f,0x82,0x0f,0x82,0x0b,0xc3,0x07,
|
|
||||||
0xd3,0x03,0xe7,0x03,0xeb,0x80,0xfb,0xc1,0xe7,0xc1,0xe7,0xd2,0xd3,0xe3,0xc2,0xe3,
|
|
||||||
0x81,0xf7,0xbc,0xf4,0xd0,0xbd,0x2f,0x3f,0x1f,0x80,0x3f,0xf0,0x00,0x03,0xe0,0x3f,
|
|
||||||
0x0b,0x00,0x07,0x2f,0xbc,0x03,0x02,0xbe,0x01,0xf8,0x7f,0xe0,0x0f,0xbd,0x02,0x01,
|
|
||||||
0x00,0x3c,0x0d,0x1d,0xb4,0x1e,0x1f,0x2e,0xbf,0x2f,0xfe,0x06,0x08,0x2f,0x01,0xfc,
|
|
||||||
0x00,0xbe,0xd0,0x07,0xf0,0x01,0x50,0x07,0x55,0x55,0xfe,0x00,0x04,0x3e,0x0f,0x3e,
|
|
||||||
0x0b,0x3e,0x07,0x3e,0x03,0x3e,0x02,0x14,0xbe,0x0b,0xfd,0x0b,0xfc,0x0b,0xf8,0x0b,
|
|
||||||
0xf4,0x0b,0x50,0x05,0x40,0xbe,0xf0,0x7f,0xf0,0x2f,0xf0,0x0f,0xf0,0x0b,0x05,0x7e,
|
|
||||||
0x00,0xfd,0x0a,0x14,0x07,0xf4,0xbf,0xd0,0xff,0x80,0x9b,0xf4,0x02,0xfd,0x00,0x64,
|
|
||||||
0x10,0xf4,0x03,0x40,0x1f,0xd0,0x1f,0xc0,0x90,0x0e,0x03,0x04,0x50,0x05,0x0b,0x04,
|
|
||||||
0x02,0xfb,0x01,0xbe,0x00,0x81,0xfb,0x40,0xff,0x7f,0xbd,0x01,0xf8,0xf0,0x03,0xe0,
|
|
||||||
0x04,0x2f,0x80,0x80,0xff,0x80,0x55,0x40,0x0a,0x1f,0xa9,0x1f,0xfe,0x05,0x54,0x21,
|
|
||||||
0x7d,0x07,0xf8,0x1f,0x1a,0xbc,0x2f,0xfc,0x15,0x22,0x55,0x01,0x00,0x0b,0x40,0x1c,
|
|
||||||
0x00,0x1c,0x40,0x48,0x19,0x58,0x0a,0x1f,0x0a,0x1e,0xad,0x02,0xfe,0x07,0xe4,0x48,
|
|
||||||
0x3f,0x64,0x00,0xb8,0x19,0x18,0x2f,0x40,0x88,0xff,0x80,0x2f,0x80,0x1a,0x1c,0x55,
|
|
||||||
0x0b,0xff,0x2f,0xeb,0x1d,0x00,0x04,0x01,0x00,0x6f,0x0b,0x01,0x05,0xfb,0x40,0xfc,
|
|
||||||
0x2f,0x06,0x15,0x01,0xff,0x0b,0xfa,0x1f,0x90,0x2f,0x40,0xfd,0x00,0x1c,0x09,0x0f,
|
|
||||||
0xd0,0xef,0x02,0x00,0xbf,0x02,0xfa,0x5a,0x1f,0xff,0xfe,0x80,0xbf,0x80,0xfe,0x3f,
|
|
||||||
0xfd,0x3f,0xfd,0x12,0x00,0xeb,0x40,0xff,0x0f,0x00,0x15,0x3e,0xff,0x3f,0xfb,0x3f,
|
|
||||||
0x40,0x3e,0xbd,0x00,0x11,0xb8,0x0d,0x42,0x6f,0x1f,0xfd,0x1f,0xbd,0xd0,0x05,0x12,
|
|
||||||
0x2e,0xff,0x2f,0xef,0x2f,0x42,0x2e,0x02,0x50,0xdb,0xfe,0xff,0xbf,0xf8,0x1f,0x0b,
|
|
||||||
0x05,0x1f,0x7f,0x1f,0xfa,0x1f,0xd0,0x7f,0x08,0x15,0x02,0x80,0x00,0xfd,0x1f,0x40,
|
|
||||||
0x06,0xfa,0xfd,0x04,0x07,0xeb,0x0c,0x04,0x2e,0x80,0x14,0x07,0xff,0x0f,0xeb,0x74,
|
|
||||||
0x18,0x15,0x1a,0xaa,0x55,0xff,0xff,0xaa,0x50,0xff,0xf8,0xaa,0xa4,0x21,0x90,0x01,
|
|
||||||
0x3f,0xaf,0x1f,0xff,0x01,0xbc,0xfc,0x00,0xfe,0x40,0x6f,0x02,0xfa,0x2e,0xbf,0x14,
|
|
||||||
0x05,0x06,0x1c,0xf8,0x06,0x2f,0xeb,0x80,0x04,0x1f,0xa5,0xd0,0x03,0xfa,0x40,0x40,
|
|
||||||
0xf9,0x06,0x07,0xd0,0x01,0x13,0x0b,0xe5,0x07,0xff,0x00,0x6a,0x00,0x00,0x09,0x00,
|
|
||||||
0x0b,0xff,0x00,0xbf,0x40,0xef,0x40,0x4f,0x7f,0x02,0x7d,0x14,0x0a,0x0f,0xf8,0x05,
|
|
||||||
0xf8,0x3f,0xf4,0x2f,0x90,0x10,0x1f,0xef,0x42,0x80,0x15,0x0d,0x14,0x14,0x2f,0x00,
|
|
||||||
0x04,0x7f,0x09,0xfa,0x2f,0xbf,0x2f,0x05,0x0a,0xfa,0x01,0xef,0x02,0x0e,0x16,0x08,
|
|
||||||
0xeb,0xbd,0x22,0x01,0xa0,0x02,0xf0,0xff,0x26,0x68,0x02,0xfd,0x03,0xd4,0x03,0x17,
|
|
||||||
0x28,0x00,0x38,0x16,0x09,0x40,0x1f,0xe0,0x05,0xf0,0x00,0xb0,0x7b,0x2b,0xe9,0xff,
|
|
||||||
0xff,0xf9,0x6f,0x5b,0x03,0xc0,0xd0,0x68,0x28,0x00,0x3d,0x44,0x69,0x01,0xff,0xeb,
|
|
||||||
0x1f,0x82,0x40,0x00,0xc0,0x0f,0xf0,0x02,0xf0,0x1f,0xff,0x1f,0xff,0x12,0x7e,0x04,
|
|
||||||
0x0f,0xc0,0xe0,0x02,0xf0,0x01,0xf4,0x7c,0x05,0x3e,0x01,0x2f,0x02,0x1f,0x43,0x0f,
|
|
||||||
0x83,0x0b,0xc7,0x07,0xcb,0x07,0xfc,0x0b,0xfd,0x0f,0xfe,0x0f,0xee,0x1f,0x9f,0xc0,
|
|
||||||
0xc0,0x07,0xe0,0x01,0xf9,0x3f,0x2f,0xf8,0x02,0x7d,0xd1,0x03,0xe2,0x02,0xf7,0xb8,
|
|
||||||
0xf0,0x03,0xff,0x2f,0xff,0x0b,0xf8,0x04,0x03,0xc0,0x02,0xc0,0x02,0xd0,0x02,0xd0,
|
|
||||||
0x0b,0xc0,0x0e,0x38,0x0f,0x01,0xf8,0x01,0x16,0x6a,0x07,0xff,0x1f,0xea,0x2d,0x00,
|
|
||||||
0x04,0xe4,0x00,0xff,0x96,0x2f,0xff,0x01,0xa9,0x10,0xf4,0x05,0x0e,0x00,0x2f,0x0a,
|
|
||||||
0xbf,0x1f,0xff,0x05,0xbe,0x00,0xbd,0xd0,0x02,0x40,0x00,0xaa,0x80,0xff,0xd0,0x55,
|
|
||||||
0xff,0xd0,0xff,0xd0,0xe0,0x00,0x17,0x34,0x0a,0xaf,0x0f,0xff,0x0a,0xaf,0x00,0x0f,
|
|
||||||
0xc0,0x80,0x00,0xea,0x40,0xff,0x80,0xaa,0x40,0x80,0x5f,0x15,0x7d,0x3f,0xff,0x3f,
|
|
||||||
0xff,0x54,0xfd,0x09,0x2a,0xbe,0x3f,0xff,0x2a,0xbe,0xa9,0xa8,0x09,0x1e,0xb4,0x1e,
|
|
||||||
0x01,0xfe,0x40,0x07,0x3f,0x41,0x2f,0xeb,0x0b,0xff,0xbe,0xbe,0x05,0x00,0xf9,0x1f,
|
|
||||||
0x06,0x03,0xdf,0x02,0xff,0x02,0xfe,0xfd,0x4f,0x7d,0x0b,0xbc,0x07,0xf8,0x07,0xf4,
|
|
||||||
0x03,0xf4,0x01,0x50,0x03,0x7f,0x00,0xfa,0x02,0xf4,0x0b,0xe0,0x2f,0x80,0x05,0x03,
|
|
||||||
0x01,0xfb,0x7f,0xbd,0x2f,0xf8,0x1f,0x01,0xf8,0x07,0xe0,0x1f,0x80,0x15,0x55,0xfc,
|
|
||||||
0x54,0x04,0xd0,0x02,0xc0,0x03,0xc0,0x03,0x80,0x03,0xd0,0x02,0xfd,0x00,0x68,0x10,
|
|
||||||
0x1d,0x00,0xb0,0x01,0xf0,0x1f,0xe0,0x0a,0x40,0x71,0x0f,0x01,0xe4,0x07,0xff,0xbf,
|
|
||||||
0xbf,0xff,0x06,0x94,0xd0,0x07,0x16,0x0b,0x00,0x0e,0x14,0x0f,0x1f,0x04,0x1f,0x1f,
|
|
||||||
0xbe,0x0b,0xfd,0x00,0x60,0x40,0x0d,0x3e,0x0f,0x0e,0x03,0x0d,0x03,0x34,0x0e,0x08,
|
|
||||||
0x06,0x00,0x1f,0xc0,0x1f,0xc0,0x06,0x18,0x00,0x7e,0x01,0x7f,0x01,0x19,0x60,0x64,
|
|
||||||
0x3d,0x28,0x1d,0x0e,0x38,0x06,0xe4,0x0b,0xbc,0x1d,0x90,0x02,0xd0,0x07,0x03,0x01,
|
|
||||||
0x00,0x07,0xe0,0x02,0xfa,0x1a,0x00,0xaf,0x04,0x40,0x00,0xa4,0x0a,0x0b,0x0f,0x6f,
|
|
||||||
0x01,0xff,0x03,0xf5,0x96,0xaa,0xff,0xff,0xff,0xaa,0xa4,0xa4,0x25,0x07,0xd0,0xbf,
|
|
||||||
0x00,0x1a,0x1a,0xaa,0xaa,0x67,0x40,0x1c,0x00,0x2c,0x19,0x17,0x01,0x1c,0x07,0x3c,
|
|
||||||
0x0f,0x39,0x0e,0x40,0x0f,0x80,0x5e,0x26,0x90,0x0f,0xf8,0x2f,0xbf,0x38,0x1b,0x20,
|
|
||||||
0x02,0x40,0x4b,0x80,0xff,0x09,0x1a,0xa9,0x2f,0xfe,0xa0,0x19,0xf8,0x2e,0xfc,0x7e,
|
|
||||||
0xfe,0xfe,0xef,0xea,0x0b,0x80,0x07,0xf6,0x14,0x08,0x0f,0x7e,0x1d,0x1e,0x0b,0xbd,
|
|
||||||
0x06,0xf6,0x1e,0x00,0x2d,0x0f,0x00,0x2d,0x00,0x78,0x85,0x00,0x7f,0x81,0xb6,0xd3,
|
|
||||||
0x64,0xdb,0x40,0x07,0xff,0x0f,0x90,0x2f,0x00,0x6f,0x00,0x6f,0x40,0xa0,0xbf,0x00,
|
|
||||||
0xb8,0x01,0xf4,0x02,0xe0,0x07,0xc0,0x0f,0x0f,0x40,0x0b,0xc0,0x0e,0x0b,0x1f,0x2e,
|
|
||||||
0x1e,0x3f,0x40,0x40,0x0b,0x40,0x0b,0xff,0xe0,0x25,0x2f,0xff,0x3f,0x00,0xbd,0xff,
|
|
||||||
0x80,0xbf,0x80,0xbe,0x09,0x4e,0x2f,0x80,0x2f,0x80,0x1a,0x19,0x00,0x39,0x19,0x29,
|
|
||||||
0x0a,0x0a,0x10,0x15,0x54,0x2f,0xfd,0x16,0x1a,0xaa,0xaa,0xaa,0xa8,0x05,0x55,0x55,
|
|
||||||
0x55,0x55,0x54,0xff,0xf8,0xaa,0x21,0x01,0x90,0xeb,0xda,0xe2,0x8a,0xe0,0x0a,0x90,
|
|
||||||
0x0a,0x07,0xff,0xaa,0x80,0x0f,0x90,0x07,0xfe,0xe0,0x90,0x7c,0x90,0x00,0xd0,0x01,
|
|
||||||
0xf0,0x7d,0x07,0x54,0xef,0x1f,0x43,0x2e,0x01,0x2d,0x50,0x4b,0xfd,0xdf,0xaf,0xfd,
|
|
||||||
0x0b,0xf8,0x03,0xf9,0xaf,0xff,0xfe,0xc0,0x32,0xb4,0x01,0xe1,0x03,0xc0,0x0b,0x40,
|
|
||||||
0x1e,0xe1,0xe7,0xd1,0xeb,0xe1,0xe7,0xf6,0xd3,0x7f,0xc2,0x87,0x80,0x47,0x80,0x87,
|
|
||||||
0x80,0xdb,0x40,0xfe,0x2f,0x40,0x1f,0xfa,0x02,0xff,0xc0,0xc0,0xbf,0x40,0xfd,0x00,
|
|
||||||
0x04,0x03,0xe0,0x3d,0x0b,0x00,0x0e,0x1f,0x7f,0x40,0xff,0xff,0xeb,0xff,0x45,0x54,
|
|
||||||
0x23,0x02,0xf8,0x0b,0xaa,0x80,0x55,0x72,0x9f,0x1a,0xa8,0xdd,0xaf,0x00,0x01,0x0a,
|
|
||||||
0x00,0x1f,0xea,0x06,0xff,0xf8,0x00,0xbd,0xfd,0x05,0xb8,0x01,0xf0,0x03,0xd0,0x0b,
|
|
||||||
0x80,0x0f,0x40,0x2e,0x10,0x2d,0x00,0x2e,0x01,0x1f,0x43,0x0b,0xef,0x02,0xfa,0x50,
|
|
||||||
0xf8,0x01,0xfd,0x07,0xdf,0xaf,0x4b,0xfe,0x80,0x43,0x04,0x0b,0xd7,0x10,0xf4,0x06,
|
|
||||||
0xfc,0x1a,0xa4,0x3c,0x3e,0x2b,0x05,0x00,0x01,0x7f,0x00,0x00,0x00,0xa9,0x00,0xff,
|
|
||||||
0x80,0x5b,0xd0,0x0c,0x2d,0x10,0x08,0x40,0x0f,0x80,0x0b,0x68,0x01,0xf8,0x03,0xf0,
|
|
||||||
0x06,0x18,0x2d,0x0b,0xfa,0x07,0x40,0x2e,0x06,0x0b,0x15,0x05,0xd0,0x0b,0x06,0xb8,
|
|
||||||
0x02,0x15,0x40,0xff,0xf9,0x95,0x6f,0x00,0x02,0x05,0x80,0xb8,0x50,0x0f,0xf8,0x09,
|
|
||||||
0x01,0xfe,0x07,0x5e,0x17,0x08,0x00,0x2c,0xb0,0x0e,0x38,0x68,0x03,0x01,0xa4,0x1f,
|
|
||||||
0xff,0x3d,0x0b,0x3c,0x03,0x3d,0x07,0x1f,0xbf,0xc0,0x0e,0x01,0x90,0x07,0x06,0xa4,
|
|
||||||
0x1f,0xbd,0x3c,0x1e,0x14,0x1e,0x01,0xfd,0x1e,0x07,0xff,0x15,0x05,0x57,0x2f,0xf4,
|
|
||||||
0x03,0x1f,0x03,0xf0,0x01,0x1f,0x00,0x0b,0x02,0xf4,0x03,0xe0,0x40,0x3e,0x30,0x2a,
|
|
||||||
0x29,0x2e,0x07,0xbf,0x02,0xfe,0x0b,0xe0,0x0f,0x80,0x1f,0x40,0x1f,0x41,0x1f,0x42,
|
|
||||||
0xad,0x40,0xbb,0xc0,0xf2,0xc0,0xe0,0x00,0x01,0xf4,0xf4,0x00,0xb8,0x05,0xbd,0x1f,
|
|
||||||
0xff,0x0a,0xbe,0x00,0x2e,0x02,0xe0,0x01,0x55,0xa9,0x01,0x1f,0x46,0x07,0xef,0x01,
|
|
||||||
0xf9,0x01,0xe0,0xf0,0x91,0xf4,0xff,0xd0,0x6f,0x40,0x0b,0x80,0x03,0x00,0x02,0x3f,
|
|
||||||
0x05,0x6f,0x0f,0xff,0x0a,0xab,0x00,0x03,0x0b,0xd0,0x1f,0x80,0x2f,0xf9,0x50,0xff,
|
|
||||||
0xf8,0xea,0xa4,0x00,0x14,0x11,0xf9,0x06,0xff,0x0f,0x96,0x1f,0x0f,0xd0,0x07,0xfe,
|
|
||||||
0x04,0xff,0xbf,0x2f,0x07,0x80,0x0b,0x02,0x0e,0x0b,0x1d,0x0b,0x1d,0x0f,0x0b,0x0e,
|
|
||||||
0x07,0xbf,0xf8,0xe5,0x7d,0x80,0x08,0x40,0x00,0xc0,0x09,0x2d,0x0b,0x00,0x07,0x40,
|
|
||||||
0x0b,0x00,0x2d,0x0e,0x1d,0x3f,0x0b,0xe6,0x00,0x00,0x2a,0xaa,0x2a,0xaa,0x80,0x05,
|
|
||||||
0x01,0xe0,0x03,0xc0,0x07,0x42,0x0e,0x07,0x2d,0x0f,0x38,0x1d,0x2c,0x0e,0x0e,0x07,
|
|
||||||
0xb4,0x04,0x15,0x55,0x7f,0xff,0x6a,0xaf,0x05,0x40,0x05,0x07,0x81,0x02,0x1d,0x0e,
|
|
||||||
0x02,0xaa,0x90,0xea,0xf4,0xc0,0x38,0xc0,0x38,0xea,0xf4,0xeb,0xd0,0xc1,0xe0,0xc0,
|
|
||||||
0xf4,0x1f,0x1e,0x02,0x00,0x02,0x1a,0xab,0xab,0x00,0xe0,0x00,0xea,0xa8,0xff,0xfd,
|
|
||||||
0xfa,0xa9,0xe0,0x03,0x0b,0x90,0x2e,0x00,0x3e,0x21,0xbd,0x02,0xf4,0x0b,0xd0,0x2f,
|
|
||||||
0xea,0x05,0x07,0x01,0x34,0x3e,0x2a,0x11,0x0f,0xc3,0x0b,0xe7,0xbf,0x2c,0x81,0xc0,
|
|
||||||
0x47,0xc0,0xaf,0x80,0xfe,0x01,0x3d,0xf9,0x0f,0xff,0x0b,0x24,0xfa,0xfc,0xff,0xf4,
|
|
||||||
0x15,0x03,0xef,0x1f,0x46,0x1d,0x6f,0x40,0xfb,0xd0,0x91,0xf4,0x00,0x74,0x06,0x0a,
|
|
||||||
0xab,0x0f,0x03,0xea,0xa4,0xff,0xf8,0xe5,0x50,0x08,0x2d,0x29,0x14,0x6f,0x00,0x01,
|
|
||||||
0x01,0x07,0xe5,0x01,0xf9,0x2f,0xbe,0x90,0x31,0x0b,0x02,0x07,0x80,0xb8,0xf9,0xbd,
|
|
||||||
0xbf,0xf4,0x02,0x95,0x6f,0xff,0xf9,0xb8,0x26,0x0b,0x42,0x03,0x81,0xf0,0x2c,0xe0,
|
|
||||||
0x38,0x0e,0x00,0x0a,0x0a,0x3c,0x81,0xc0,0x78,0x80,0x37,0x20,0xaa,0xaa,0xaa,0xa9,
|
|
||||||
0x4a,0x01,0xa9,0x0b,0xef,0x0a,0x07,0x00,0x5b,0x05,0x10,0x01,0xf8,0x0b,0xfd,0x2f,
|
|
||||||
0xd0,0x09,0x4b,0x01,0xbf,0x0b,0xff,0x2f,0xfe,0x1e,0x65,0x01,0x40,0x1b,0x80,0x3f,
|
|
||||||
0x80,0x12,0x80,0x02,0x15,0x01,0x50,0x0b,0xfd,0x1e,0x0b,0x2c,0x07,0x2c,0x07,0x40,
|
|
||||||
0x09,0x04,0x08,0x2c,0x0e,0x1e,0x0b,0x0b,0x03,0x0c,0x02,0xe0,0x1f,0x14,0x39,0x50,
|
|
||||||
0x0b,0xfe,0x1e,0x01,0x00,0x0b,0x40,0x1f,0x0d,0xc0,0x04,0x0b,0x01,0xf8,0x05,0x3f,
|
|
||||||
0x00,0x19,0xf4,0x03,0x06,0xf4,0xa0,0x2f,0x01,0x04,0x14,0xff,0x07,0x41,0x02,0x40,
|
|
||||||
0x20,0xe0,0xb4,0xff,0xf0,0x6f,0xd0,0x05,0x06,0x7e,0x15,0xc0,0xfc,0x06,0x2e,0x2e,
|
|
||||||
0x90,0x0b,0x5f,0xfc,0x10,0x05,0x00,0x00,0xff,0x10,0x07,0x19,0x03,0x1f,0xaf,0x06,
|
|
||||||
0xfa,0xc0,0x3d,0x05,0x00,0x14,0x00,0x7d,0xbd,0x00,0xfe,0x2f,0xfe,0x0b,0xfe,0x01,
|
|
||||||
0x00,0x2e,0x06,0x1f,0xd0,0x05,0x34,0x80,0x16,0x2d,0x0b,0x0f,0xae,0x02,0xa4,0x06,
|
|
||||||
0x03,0x81,0x02,0xd0,0x74,0x00,0x3c,0x2c,0x00,0x74,0x0e,0xe0,0x01,0x00,0x92,0x00,
|
|
||||||
0x07,0x02,0xe0,0x07,0xd0,0x0b,0x40,0x2e,0x00,0x7c,0x00,0xf4,0x1a,0xe0,0x7e,0xc0,
|
|
||||||
0xfa,0x19,0xbf,0xe2,0xe6,0xc2,0x80,0x0b,0x01,0xae,0x01,0xaf,0x00,0x07,0x2d,0x07,
|
|
||||||
0x1f,0xaf,0x01,0x40,0x41,0xf0,0x83,0xd0,0x8b,0x80,0x6e,0x02,0x7d,0x0b,0xb4,0x90,
|
|
||||||
0x0b,0x06,0x0f,0x00,0x6f,0x02,0xfe,0x03,0x2f,0x7d,0x00,0xfc,0x01,0xf4,0x02,0xfa,
|
|
||||||
0xf8,0x7e,0x1f,0x40,0x0f,0xc0,0x0b,0xd0,0xab,0xe0,0x07,0xfc,0x80,0x03,0x0f,0x25,
|
|
||||||
0xbc,0x03,0x3f,0xc0,0x01,0x07,0x1f,0x7d,0xfe,0xfd,0xaf,0x00,0x4f,0x07,0xab,0xf4,
|
|
||||||
0x05,0x5f,0xe0,0x01,0xff,0xff,0xf9,0x55,0xf8,0xf8,0x07,0xfe,0x40,0x2f,0x80,0xaf,
|
|
||||||
0xe0,0x02,0xa0,0x00,0x6d,0x1f,0xeb,0x1f,0xff,0x1f,0xa9,0x1a,0xfd,0x7d,0x0d,0x33,
|
|
||||||
0x40,0x02,0x03,0xc0,0x1f,0x80,0x2e,0x0a,0x58,0xf0,0x81,0x0b,0x43,0x0e,0x07,0x2c,
|
|
||||||
0x0e,0x14,0x78,0xd0,0x2e,0x00,0xb8,0xd0,0x06,0x42,0xda,0x0b,0x4a,0x1e,0xaf,0x1a,
|
|
||||||
0xaf,0x90,0x40,0x02,0xb8,0xea,0x02,0xa0,0x02,0x7c,0x00,0x64,0x79,0xc1,0xe1,0x43,
|
|
||||||
0x01,0xe8,0xd0,0x0b,0xe0,0x1f,0x80,0x0f,0xe0,0x07,0xff,0x02,0x90,0x07,0xd0,0x2f,
|
|
||||||
0xc0,0xff,0x40,0xf8,0x02,0xff,0x0b,0xd5,0x0f,0xc0,0x00,0x00,0xff,0xf0,0xfc,0x3e,
|
|
||||||
0x02,0x3f,0x56,0xf4,0x0a,0x07,0x23,0x2f,0x14,0xf8,0x7e,0x04,0x02,0xff,0x03,0xf5,
|
|
||||||
0xff,0xf8,0x55,0xbc,0x2f,0x40,0xe5,0x07,0xd0,0x0f,0x7d,0x08,0x3e,0xfe,0xaa,0xff,
|
|
||||||
0xff,0x55,0x90,0x07,0xf5,0x1b,0x07,0x2e,0x00,0x00,0x17,0xf0,0xff,0xd0,0xf9,0x17,
|
|
||||||
0x10,0x00,0x7d,0x2f,0xff,0x03,0x01,0xbf,0x02,0xfd,0x01,0x90,0x80,0x05,0x2a,0xff,
|
|
||||||
0x0b,0xe2,0x0b,0x40,0xe0,0x78,0x06,0x00,0x0b,0xd2,0x05,0x50,0x03,0xb9,0x00,0xff,
|
|
||||||
0x80,0x2f,0xe0,0x01,0x3e,0x14,0x40,0xbf,0xc0,0xf9,0x12,0x6a,0xff,0xe0,0xd2,0xf8,
|
|
||||||
0x40,0xb8,0x00,0x10,0x14,0xc2,0xf4,0x40,0x50,0x16,0x7f,0xff,0xe4,0x01,0x90,0x0b,
|
|
||||||
0xfd,0x1f,0xbf,0x2d,0x0b,0x14,0x80,0x42,0xc0,0xff,0x80,0xfe,0x02,0x00,0x80,0xfd,
|
|
||||||
0x00,0x28,0xfe,0x07,0x0a,0x6f,0xb8,0x54,0x07,0x7e,0x11,0xa4,0xff,0x40,0x5f,0x05,
|
|
||||||
0x81,0x24,0x95,0x04,0x01,0xc0,0x05,0x40,0x05,0x60,0x0c,0x54,0x7e,0xff,0x02,0x3f,
|
|
||||||
0x2f,0x80,0x00,0xe4,0x68,0xf0,0x05,0x2f,0x38,0x40,0xf4,0x03,0x06,0x01,0xf8,0x90,
|
|
||||||
0x7e,0x06,0x02,0xf8,0x2f,0xf0,0x0e,0x2f,0xff,0x2f,0x00,0xff,0x2f,0xaa,0x2f,0xfd,
|
|
||||||
0x00,0xa9,0x03,0x2e,0x29,0xfc,0x00,0xa8,0x12,0x00,0x0c,0x3e,0x0e,0x7e,0x7e,0x0a,
|
|
||||||
0xbe,0x1f,0xff,0x0a,0xbe,0xff,0xfe,0x0b,0x02,0xa4,0xa4,0x02,0xf0,0xf0,0x00,0x2f,
|
|
||||||
0xd0,0x2f,0xf0,0x2f,0xf8,0x2e,0xbd,0x2e,0x3f,0x2e,0x2f,0x2e,0x0f,0x2e,0x82,0xe0,
|
|
||||||
0xd2,0xe0,0xe2,0x07,0xfe,0x0f,0xd0,0x7e,0x7e,0x00,0xbf,0xd0,0x0b,0xe0,0x02,0xbc,
|
|
||||||
0xbd,0xff,0x03,0xf4,0x0b,0xd0,0x2f,0x3e,0x00,0x07,0x44,0xc0,0xaf,0xf4,0x02,0xfc,
|
|
||||||
0x3f,0x00,0x40,0xd0,0x07,0xf4,0x01,0xfd,0xbe,0x01,0xf8,0x07,0x7e,0xbe,0x00,0x0b,
|
|
||||||
0x42,0x1f,0x4b,0xaf,0xf4,0x07,0xf8,0x0f,0xfd,0x2f,0x7e,0x7d,0x2f,0xf8,0xd0,0x02,
|
|
||||||
0xf0,0x5f,0x0e,0x05,0xaa,0x2f,0xff,0x15,0xaa,0x40,0xff,0x80,0x55,0x09,0x78,0x15,
|
|
||||||
0x13,0x7e,0x7f,0x03,0x6f,0xab,0xfe,0xff,0xe4,0xe0,0x2e,0x02,0xf6,0xe0,0xfe,0xe0,
|
|
||||||
0x7f,0xe0,0x2f,0xe0,0x0f,0xe0,0x05,0x50,0x04,0xfa,0x1a,0x02,0xf8,0x07,0xf0,0xaf,
|
|
||||||
0xd0,0xfe,0x40,0xa4,0x04,0x06,0xbe,0x01,0xfc,0xaf,0xf4,0xff,0x90,0xa5,0x09,0x02,
|
|
||||||
0xbd,0x80,0x04,0x02,0xf8,0x15,0x3f,0xab,0xa9,0x04,0xf8,0x0b,0xe0,0x2f,0x80,0x1d,
|
|
||||||
0x80,0xf8,0x08,0x0f,0x9f,0x0b,0xfe,0x07,0xfd,0x02,0xfe,0xc6,0x0a,0x80,0x05,0x0f,
|
|
||||||
0xd0,0x0b,0x07,0xe0,0x08,0xc0,0x0b,0xfa,0x02,0xc0,0xfe,0x40,0x94,0x05,0x2f,0x0b,
|
|
||||||
0x00,0x05,0x80,0x03,0x90,0x18,0x00,0x34,0x11,0x1a,0x1d,0x01,0xaa,0x09,0x0a,0x00,
|
|
||||||
0xbf,0x03,0xfd,0xd0,0x0a,0xf8,0x08,0x40,0x0b,0xf8,0x2f,0xfe,0x78,0x1f,0x40,0x07,
|
|
||||||
0x80,0xff,0x09,0x0b,0xe1,0x05,0x19,0x01,0xff,0xc0,0x02,0xe5,0xd0,0xb4,0x00,0x0f,
|
|
||||||
0x4a,0x16,0x80,0x3b,0x15,0x18,0xfd,0x17,0xe2,0xf8,0x18,0x17,0xb8,0x1f,0x06,0x00,
|
|
||||||
0xaf,0x0a,0x1f,0x00,0x40,0xff,0x10,0x03,0x2f,0x00,0x0f,0x07,0xe0,0x0b,0xc0,0x1f,
|
|
||||||
0x40,0xd0,0x02,0x2f,0x55,0xa4,0x6f,0x80,0x6f,0x0b,0xff,0x2f,0x95,0x01,0x3e,0x2f,
|
|
||||||
0x3e,0x1a,0x3e,0x00,0xf9,0xf8,0x00,0xbe,0x01,0x00,0x02,0xbf,0x1f,0xff,0x2e,0x41,
|
|
||||||
0x08,0x00,0x00,0x5b,0x07,0xff,0xf8,0xfc,0x00,0x00,0xfc,0x00,0x40,0x01,0x1e,0x78,
|
|
||||||
0x90,0x00,0x20,0x02,0xfd,0x05,0x01,0x1f,0x40,0x1b,0x06,0xff,0x54,0xbc,0x03,0x05,
|
|
||||||
0x05,0xff,0x1f,0xff,0x0e,0x02,0x04,0x02,0x00,0x02,0x06,0x5b,0xf8,0xff,0xfe,0xf8,
|
|
||||||
0x1f,0xf0,0x0b,0xe5,0xab,0xff,0x40,0x00,0x05,0x01,0xbf,0x07,0xfa,0x1f,0x80,0x04,
|
|
||||||
0x02,0x00,0x00,0xaf,0x07,0xff,0x0f,0x90,0x2f,0x00,0x2e,0x16,0x3f,0xff,0x90,0xbe,
|
|
||||||
0xaf,0x00,0x00,0x01,0xbf,0x3e,0x00,0xbf,0x01,0x1f,0xbd,0x02,0x05,0x2e,0x00,0x3d,
|
|
||||||
0x50,0x06,0x2a,0x0e,0x2a,0x19,0x40,0xb8,0x00,0x10,0x29,0x1a,0x1a,0x02,0xfe,0x00,
|
|
||||||
0x00,0x6f,0x1f,0x40,0x2f,0x40,0xef,0x80,0xff,0xc0,0x2f,0xc0,0x20,0x19,0x6a,0x2e,
|
|
||||||
0xff,0x2f,0xd5,0x2f,0x13,0x0b,0x05,0xc0,0x40,0x04,0xa4,0x10,0x05,0x29,0x08,0x1f,
|
|
||||||
0xe4,0x2f,0xab,0x1f,0xff,0x01,0xfe,0x40,0xbf,0x40,0x06,0x04,0x3f,0x17,0x1f,0xe4,
|
|
||||||
0x2e,0xaf,0x0a,0x01,0x1a,0xbc,0x00,0xfe,0x80,0xaf,0x80,0x34,0x0f,0xff,0x02,0x2f,
|
|
||||||
0x5f,0x1f,0xff,0x06,0xfa,0x94,0xe0,0x01,0xf4,0x07,0xfe,0xaf,0x6f,0xfe,0x06,0x80,
|
|
||||||
0x0b,0xe4,0x6f,0x00,0x0f,0xbd,0x6e,0x90,0x05,0xa9,0x2e,0x0b,0xea,0x50,0x1e,0x40,
|
|
||||||
0x49,0xfe,0x09,0x00,0xf4,0x05,0x4e,0x14,0x43,0x07,0xf9,0x07,0xd0,0x0b,0xd0,0x1f,
|
|
||||||
0xc0,0xbf,0x50,0x13,0x1e,0xbf,0x00,0x1b,0xd0,0x0a,0x01,0x7f,0x01,0x18,0x1a,0x00,
|
|
||||||
0xbf,0x01,0xff,0x07,0xe5,0xf4,0x0c,0xf4,0x3f,0x0a,0x03,0x03,0xbd,0x0e,0xf4,0x3a,
|
|
||||||
0x2e,0x00,0xf4,0x1b,0xe0,0x09,0x7f,0xf5,0x0a,0x07,0xe0,0x04,0x27,0x1f,0x0b,0xe0,
|
|
||||||
0x16,0xff,0x36,0x6a,0xe5,0x2f,0x3e,0x00,0xa0,0x40,0x0f,0x80,0x0b,0x00,0xa0,0x00,
|
|
||||||
0x0f,0x00,0x80,0x01,0x1f,0x7d,0x0a,0x20,0x07,0x00,0x1f,0x01,0x01,0x6a,0xe5,0xfd,
|
|
||||||
0x80,0x00,0x05,0x55,0x2f,0xff,0x1a,0xaa,0x55,0x55,0xff,0xff,0xaa,0xaa,0x6a,0x06,
|
|
||||||
0x81,0x2f,0x02,0x2e,0x0b,0x9f,0x40,0xfe,0x80,0xef,0x80,0xcb,0xc0,0x02,0x0a,0xa0,
|
|
||||||
0x02,0x1a,0x6d,0x1a,0x2f,0x54,0x07,0x1a,0x00,0xf9,0x40,0xf8,0x01,0x5b,0x2f,0xbf,
|
|
||||||
0x2f,0xf4,0x2f,0xe0,0x2f,0x40,0xd0,0x02,0xd0,0x02,0xf9,0x0a,0x04,0xff,0x3d,0x2f,
|
|
||||||
0x40,0x08,0x2f,0x1f,0x0d,0x3f,0x00,0x09,0x5a,0x40,0x2f,0x09,0x2f,0x0b,0xfa,0x0b,
|
|
||||||
0xc0,0x80,0x08,0x60,0x06,0x1f,0x2f,0x7e,0x1f,0xf8,0x0b,0xfa,0x03,0xff,0x0b,0x9a,
|
|
||||||
0x4b,0xc0,0x0c,0x69,0x3f,0x40,0xff,0x40,0xef,0x40,0x05,0x09,0x0f,0xfa,0x07,0x7f,
|
|
||||||
0x10,0xea,0x7f,0xef,0x00,0x34,0x00,0x1f,0x00,0x7f,0x0f,0xfd,0x0f,0xf0,0xd0,0x00,
|
|
||||||
0x00,0xf0,0x2f,0xfe,0x2f,0x6f,0x2f,0x45,0x07,0xd0,0x90,0x08,0xbe,0xd0,0x80,0xff,
|
|
||||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
|
||||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
|
||||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
|
||||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
|
||||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
|
||||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
|
||||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
|
|
||||||
0xff,0xff,0xff,0xff,0xa2,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
|
|
||||||
};
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/*** Backdrop ***/
|
|
||||||
char backdrop[(640 * 480 * 2) + 32];
|
char backdrop[(640 * 480 * 2) + 32];
|
||||||
|
|
||||||
/* Backdrop Frame Width (to avoid writing outside of the background frame) */
|
/* Backdrop Frame Width (to avoid writing outside of the background frame) */
|
||||||
@ -635,7 +28,6 @@ static unsigned char fontFont[ 0x40000 ] __attribute__((aligned(32)));
|
|||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
* YAY0 Decoding
|
* YAY0 Decoding
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
/* Yay0 decompression */
|
|
||||||
void yay0_decode(unsigned char *s, unsigned char *d)
|
void yay0_decode(unsigned char *s, unsigned char *d)
|
||||||
{
|
{
|
||||||
int i, j, k, p, q, cnt;
|
int i, j, k, p, q, cnt;
|
||||||
|
@ -1,221 +0,0 @@
|
|||||||
/****************************************************************************
|
|
||||||
* DVD ISO9660/Joliet Parsing
|
|
||||||
*
|
|
||||||
* This is not intended as a complete guide to ISO9660.
|
|
||||||
* Here I use the bare minimum!
|
|
||||||
***************************************************************************/
|
|
||||||
#include "shared.h"
|
|
||||||
#include "dvd.h"
|
|
||||||
#include "iso9660.h"
|
|
||||||
|
|
||||||
/** Minimal ISO Directory Definition **/
|
|
||||||
#define RECLEN 0 /* Record length */
|
|
||||||
#define EXTENT 6 /* Extent */
|
|
||||||
#define FILE_LENGTH 14 /* File length (BIG ENDIAN) */
|
|
||||||
#define FILE_FLAGS 25 /* File flags */
|
|
||||||
#define FILENAME_LENGTH 32 /* Filename length */
|
|
||||||
#define FILENAME 33 /* ASCIIZ filename */
|
|
||||||
|
|
||||||
/** Minimal Primary Volume Descriptor **/
|
|
||||||
#define PVDROOT 0x9c
|
|
||||||
|
|
||||||
static int IsJoliet = 0;
|
|
||||||
u64 rootdir = 0;
|
|
||||||
u64 basedir = 0;
|
|
||||||
int rootdirlength = 0;
|
|
||||||
|
|
||||||
/** Global file entry table **/
|
|
||||||
FILEENTRIES filelist[MAXFILES];
|
|
||||||
static char dvdbuffer[2048] ATTRIBUTE_ALIGN (32);
|
|
||||||
|
|
||||||
/****************************************************************************
|
|
||||||
* Primary Volume Descriptor
|
|
||||||
*
|
|
||||||
* The PVD should reside between sector 16 and 31.
|
|
||||||
* This is for single session DVD only.
|
|
||||||
****************************************************************************/
|
|
||||||
int getpvd ()
|
|
||||||
{
|
|
||||||
int sector = 16;
|
|
||||||
u32 rootdir32;
|
|
||||||
|
|
||||||
basedir = rootdirlength = 0;
|
|
||||||
IsJoliet = -1;
|
|
||||||
|
|
||||||
/** Look for Joliet PVD first **/
|
|
||||||
while (sector < 32)
|
|
||||||
{
|
|
||||||
if (dvd_read (&dvdbuffer, 2048, (u64)(sector << 11)))
|
|
||||||
{
|
|
||||||
if (memcmp (&dvdbuffer, "\2CD001\1", 8) == 0)
|
|
||||||
{
|
|
||||||
memcpy(&rootdir32, &dvdbuffer[PVDROOT + EXTENT], 4);
|
|
||||||
basedir = (u64)rootdir32;
|
|
||||||
memcpy (&rootdirlength, &dvdbuffer[PVDROOT + FILE_LENGTH], 4);
|
|
||||||
basedir <<= 11;
|
|
||||||
IsJoliet = 1;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else return 0; /*** Can't read sector! ***/
|
|
||||||
sector++;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (IsJoliet > 0) return 1; /*** Joliet PVD Found ? ***/
|
|
||||||
|
|
||||||
/*** Look for standard ISO9660 PVD ***/
|
|
||||||
sector = 16;
|
|
||||||
while (sector < 32)
|
|
||||||
{
|
|
||||||
if (dvd_read (&dvdbuffer, 2048, (u64)(sector << 11)))
|
|
||||||
{
|
|
||||||
if (memcmp (&dvdbuffer, "\1CD001\1", 8) == 0)
|
|
||||||
{
|
|
||||||
memcpy (&rootdir32, &dvdbuffer[PVDROOT + EXTENT], 4);
|
|
||||||
basedir = (u64)rootdir32;
|
|
||||||
memcpy (&rootdirlength, &dvdbuffer[PVDROOT + FILE_LENGTH], 4);
|
|
||||||
IsJoliet = 0;
|
|
||||||
basedir <<= 11;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else return 0; /*** Can't read sector! ***/
|
|
||||||
sector++;
|
|
||||||
}
|
|
||||||
|
|
||||||
return (IsJoliet == 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
/****************************************************************************
|
|
||||||
* getentry
|
|
||||||
*
|
|
||||||
* Support function to return the next file entry, if any
|
|
||||||
* Declared static to avoid accidental external entry.
|
|
||||||
****************************************************************************/
|
|
||||||
static int diroffset = 0;
|
|
||||||
static int getentry (int entrycount)
|
|
||||||
{
|
|
||||||
char fname[512]; /* Huge, but experience has determined this */
|
|
||||||
char *ptr;
|
|
||||||
char *filename;
|
|
||||||
char *filenamelength;
|
|
||||||
char *rr;
|
|
||||||
int j;
|
|
||||||
u32 offset32;
|
|
||||||
|
|
||||||
/* Basic checks */
|
|
||||||
if (entrycount >= MAXFILES) return 0;
|
|
||||||
if (diroffset >= 2048) return 0;
|
|
||||||
|
|
||||||
/** Decode this entry **/
|
|
||||||
if (dvdbuffer[diroffset]) /* Record length available */
|
|
||||||
{
|
|
||||||
/* Update offsets into sector buffer */
|
|
||||||
ptr = (char *) &dvdbuffer[0];
|
|
||||||
ptr += diroffset;
|
|
||||||
filename = ptr + FILENAME;
|
|
||||||
filenamelength = ptr + FILENAME_LENGTH;
|
|
||||||
|
|
||||||
/* Check for wrap round - illegal in ISO spec,
|
|
||||||
* but certain crap writers do it! */
|
|
||||||
if ((diroffset + dvdbuffer[diroffset]) > 2048) return 0;
|
|
||||||
|
|
||||||
if (*filenamelength)
|
|
||||||
{
|
|
||||||
memset (&fname, 0, 512);
|
|
||||||
|
|
||||||
/*** Do ISO 9660 first ***/
|
|
||||||
if (!IsJoliet) strcpy (fname, filename);
|
|
||||||
else
|
|
||||||
{
|
|
||||||
/*** The more tortuous unicode joliet entries ***/
|
|
||||||
for (j = 0; j < (*filenamelength >> 1); j++)
|
|
||||||
{
|
|
||||||
fname[j] = filename[j * 2 + 1];
|
|
||||||
}
|
|
||||||
|
|
||||||
fname[j] = 0;
|
|
||||||
|
|
||||||
if (strlen (fname) >= MAXJOLIET) fname[MAXJOLIET - 1] = 0;
|
|
||||||
if (strlen (fname) == 0) fname[0] = filename[0];
|
|
||||||
}
|
|
||||||
|
|
||||||
if (strlen (fname) == 0) strcpy (fname, ".");
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (fname[0] == 1) strcpy (fname, "..");
|
|
||||||
else
|
|
||||||
{
|
|
||||||
/*
|
|
||||||
* Move *filenamelength to t,
|
|
||||||
* Only to stop gcc warning for noobs :)
|
|
||||||
*/
|
|
||||||
int t = *filenamelength;
|
|
||||||
fname[t] = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Rockridge Check **/
|
|
||||||
rr = strstr (fname, ";");
|
|
||||||
if (rr != NULL) *rr = 0;
|
|
||||||
|
|
||||||
strcpy (filelist[entrycount].filename, fname);
|
|
||||||
memcpy (&offset32, &dvdbuffer[diroffset + EXTENT], 4);
|
|
||||||
filelist[entrycount].offset = (u64)offset32;
|
|
||||||
memcpy (&filelist[entrycount].length, &dvdbuffer[diroffset + FILE_LENGTH], 4);
|
|
||||||
memcpy (&filelist[entrycount].flags, &dvdbuffer[diroffset + FILE_FLAGS], 1);
|
|
||||||
|
|
||||||
filelist[entrycount].offset <<= 11;
|
|
||||||
filelist[entrycount].flags = filelist[entrycount].flags & 2;
|
|
||||||
filelist[entrycount].filename_offset = 0;
|
|
||||||
|
|
||||||
/*** Prepare for next entry ***/
|
|
||||||
diroffset += dvdbuffer[diroffset];
|
|
||||||
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/****************************************************************************
|
|
||||||
* parseDVDdirectory
|
|
||||||
*
|
|
||||||
* This function will parse the directory tree.
|
|
||||||
* It relies on rootdir and rootdirlength being pre-populated by a call to
|
|
||||||
* getpvd, a previous parse or a menu selection.
|
|
||||||
*
|
|
||||||
* The return value is number of files collected, or 0 on failure.
|
|
||||||
****************************************************************************/
|
|
||||||
int parseDVDdirectory ()
|
|
||||||
{
|
|
||||||
int pdlength;
|
|
||||||
u64 pdoffset;
|
|
||||||
u64 rdoffset;
|
|
||||||
int len = 0;
|
|
||||||
int filecount = 0;
|
|
||||||
|
|
||||||
pdoffset = rdoffset = rootdir;
|
|
||||||
pdlength = rootdirlength;
|
|
||||||
filecount = 0;
|
|
||||||
|
|
||||||
/** Clear any existing values ***/
|
|
||||||
memset (&filelist, 0, sizeof (FILEENTRIES) * MAXFILES);
|
|
||||||
|
|
||||||
/*** Get as many files as possible ***/
|
|
||||||
while (len < pdlength)
|
|
||||||
{
|
|
||||||
if (dvd_read (&dvdbuffer, 2048, pdoffset) == 0) return 0;
|
|
||||||
|
|
||||||
diroffset = 0;
|
|
||||||
|
|
||||||
while (getentry (filecount))
|
|
||||||
{
|
|
||||||
if (filecount < MAXFILES) filecount++;
|
|
||||||
}
|
|
||||||
|
|
||||||
len += 2048;
|
|
||||||
pdoffset = rdoffset + len;
|
|
||||||
}
|
|
||||||
return filecount;
|
|
||||||
}
|
|
@ -1,31 +0,0 @@
|
|||||||
/****************************************************************************
|
|
||||||
*
|
|
||||||
* DVD ISO9660/Joliet Parsing
|
|
||||||
*
|
|
||||||
* This is not intended as a complete guide to ISO9660.
|
|
||||||
* Here I use the bare minimum!
|
|
||||||
***************************************************************************/
|
|
||||||
#ifndef _ISO9660_H
|
|
||||||
#define _ISO9660_H
|
|
||||||
|
|
||||||
#define MAXJOLIET 256
|
|
||||||
#define MAXFILES 1000 /** Restrict to 1000 files per dir **/
|
|
||||||
|
|
||||||
typedef struct
|
|
||||||
{
|
|
||||||
u64 offset;
|
|
||||||
unsigned int length;
|
|
||||||
char flags;
|
|
||||||
char filename[MAXJOLIET];
|
|
||||||
u16 filename_offset;
|
|
||||||
} FILEENTRIES;
|
|
||||||
|
|
||||||
extern u64 basedir;
|
|
||||||
extern u64 rootdir;
|
|
||||||
extern int rootdirlength;
|
|
||||||
|
|
||||||
extern int getpvd ();
|
|
||||||
extern int parseDVDdirectory ();
|
|
||||||
extern FILEENTRIES filelist[MAXFILES];
|
|
||||||
|
|
||||||
#endif
|
|
@ -24,7 +24,8 @@
|
|||||||
#include "shared.h"
|
#include "shared.h"
|
||||||
#include "dvd.h"
|
#include "dvd.h"
|
||||||
#include "font.h"
|
#include "font.h"
|
||||||
#include "history.h"
|
#include "fileio_dvd.h"
|
||||||
|
#include "fileio_fat.h"
|
||||||
|
|
||||||
#ifdef HW_RVL
|
#ifdef HW_RVL
|
||||||
#include <wiiuse/wpad.h>
|
#include <wiiuse/wpad.h>
|
||||||
@ -872,6 +873,7 @@ int filemenu ()
|
|||||||
ret = 0;
|
ret = 0;
|
||||||
quit = 1;
|
quit = 1;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 0: /*** SRAM Manager ***/
|
case 0: /*** SRAM Manager ***/
|
||||||
case 1: /*** SaveState Manager ***/
|
case 1: /*** SaveState Manager ***/
|
||||||
if (loadsavemenu(ret)) return 1;
|
if (loadsavemenu(ret)) return 1;
|
||||||
@ -928,26 +930,6 @@ int loadmenu ()
|
|||||||
quit = 1;
|
quit = 1;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
/*** Load Recent ***/
|
|
||||||
case 0:
|
|
||||||
load_menu = menu;
|
|
||||||
if (OpenHistory()) return 1;
|
|
||||||
break;
|
|
||||||
|
|
||||||
/*** Load from SD ***/
|
|
||||||
case 1:
|
|
||||||
load_menu = menu;
|
|
||||||
if (OpenFAT("") > 0) return 1;
|
|
||||||
break;
|
|
||||||
|
|
||||||
#ifdef HW_RVL
|
|
||||||
/*** Load from USB ***/
|
|
||||||
case 2:
|
|
||||||
load_menu = menu;
|
|
||||||
if (OpenFAT("usb:") > 0) return 1;
|
|
||||||
break;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/*** Load from DVD ***/
|
/*** Load from DVD ***/
|
||||||
#ifdef HW_RVL
|
#ifdef HW_RVL
|
||||||
case 3:
|
case 3:
|
||||||
@ -955,7 +937,7 @@ int loadmenu ()
|
|||||||
case 2:
|
case 2:
|
||||||
#endif
|
#endif
|
||||||
load_menu = menu;
|
load_menu = menu;
|
||||||
if (OpenDVD())
|
if (DVD_Open())
|
||||||
{
|
{
|
||||||
dvd_on = 1;
|
dvd_on = 1;
|
||||||
return 1;
|
return 1;
|
||||||
@ -977,6 +959,13 @@ int loadmenu ()
|
|||||||
#endif
|
#endif
|
||||||
menu = load_menu;
|
menu = load_menu;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
/*** Load from FAT device ***/
|
||||||
|
default:
|
||||||
|
load_menu = menu;
|
||||||
|
if (FAT_Open(ret)) return 1;
|
||||||
|
break;
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -8,22 +8,25 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include "shared.h"
|
#include "shared.h"
|
||||||
#include "font.h"
|
|
||||||
#include "history.h"
|
#include "history.h"
|
||||||
|
|
||||||
t_history history;
|
t_history history;
|
||||||
|
|
||||||
void history_save()
|
void history_save()
|
||||||
{
|
{
|
||||||
if (!use_FAT) return;
|
char pathname[MAXPATHLEN];
|
||||||
|
|
||||||
|
if (!fat_enabled) return;
|
||||||
|
|
||||||
/* first check if directory exist */
|
/* first check if directory exist */
|
||||||
DIR_ITER *dir = diropen("/genplus");
|
sprintf (pathname, DEFAULT_PATH);
|
||||||
if (dir == NULL) mkdir("/genplus",S_IRWXU);
|
DIR_ITER *dir = diropen(pathname);
|
||||||
|
if (dir == NULL) mkdir(pathname,S_IRWXU);
|
||||||
else dirclose(dir);
|
else dirclose(dir);
|
||||||
|
|
||||||
/* open file for writing */
|
/* open file for writing */
|
||||||
FILE *fp = fopen("/genplus/romhistory.ini", "wb");
|
sprintf (pathname, "%s/history.ini", pathname);
|
||||||
|
FILE *fp = fopen(pathname, "wb");
|
||||||
if (fp == NULL) return;
|
if (fp == NULL) return;
|
||||||
|
|
||||||
/* save options */
|
/* save options */
|
||||||
@ -80,8 +83,11 @@ void history_add_file(char *filepath, char *filename)
|
|||||||
|
|
||||||
void history_load()
|
void history_load()
|
||||||
{
|
{
|
||||||
|
char pathname[MAXPATHLEN];
|
||||||
|
|
||||||
/* open file for reading */
|
/* open file for reading */
|
||||||
FILE *fp = fopen("/genplus/romhistory.ini", "rb");
|
sprintf (pathname, "%s/history.ini", DEFAULT_PATH);
|
||||||
|
FILE *fp = fopen(pathname, "rb");
|
||||||
if (fp == NULL) return;
|
if (fp == NULL) return;
|
||||||
|
|
||||||
/* read file */
|
/* read file */
|
||||||
|
@ -8,17 +8,16 @@
|
|||||||
#ifndef _HISTORY_H
|
#ifndef _HISTORY_H
|
||||||
#define _HISTORY_H
|
#define _HISTORY_H
|
||||||
|
|
||||||
#include "types.h"
|
|
||||||
#include "iso9660.h"
|
|
||||||
|
|
||||||
|
#include "types.h"
|
||||||
|
#include "filesel.h"
|
||||||
|
|
||||||
|
#define NUM_HISTORY_ENTRIES (10)
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
* ROM Play History
|
* ROM Play History
|
||||||
*
|
*
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
#define NUM_HISTORY_ENTRIES (10)
|
|
||||||
|
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
char filepath[MAXJOLIET];
|
char filepath[MAXJOLIET];
|
||||||
@ -35,6 +34,4 @@ extern void history_add_file(char *filepath, char *filename);
|
|||||||
extern void history_load();
|
extern void history_load();
|
||||||
extern void set_history_defaults();
|
extern void set_history_defaults();
|
||||||
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -6,6 +6,7 @@
|
|||||||
#include "shared.h"
|
#include "shared.h"
|
||||||
#include "font.h"
|
#include "font.h"
|
||||||
#include "saveicon.h"
|
#include "saveicon.h"
|
||||||
|
|
||||||
#ifndef HW_RVL
|
#ifndef HW_RVL
|
||||||
#include "dvd.h"
|
#include "dvd.h"
|
||||||
#endif
|
#endif
|
||||||
@ -85,15 +86,17 @@ static int SD_ManageFile(char *filename, int direction, int filetype)
|
|||||||
int done = 0;
|
int done = 0;
|
||||||
int filesize;
|
int filesize;
|
||||||
|
|
||||||
if (!use_FAT) return 0;
|
if (!fat_enabled) return 0;
|
||||||
|
|
||||||
/* first check if directory exist */
|
/* first check if directory exist */
|
||||||
DIR_ITER *dir = diropen("/genplus/saves");
|
sprintf (pathname, "%s/saves", DEFAULT_PATH);
|
||||||
if (dir == NULL) mkdir("/genplus/saves",S_IRWXU);
|
|
||||||
|
DIR_ITER *dir = diropen(pathname);
|
||||||
|
if (dir == NULL) mkdir(pathname,S_IRWXU);
|
||||||
else dirclose(dir);
|
else dirclose(dir);
|
||||||
|
|
||||||
/* build complete SDCARD filename */
|
/* build complete SDCARD filename */
|
||||||
sprintf (pathname, "/genplus/saves/%s", filename);
|
sprintf (pathname, "%s/%s", pathname, filename);
|
||||||
|
|
||||||
/* open file */
|
/* open file */
|
||||||
FILE *fp = fopen(pathname, direction ? "rb" : "wb");
|
FILE *fp = fopen(pathname, direction ? "rb" : "wb");
|
||||||
|
@ -28,6 +28,8 @@
|
|||||||
#include <di/di.h>
|
#include <di/di.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#include <fat.h>
|
||||||
|
|
||||||
int Shutdown = 0;
|
int Shutdown = 0;
|
||||||
|
|
||||||
#ifdef HW_RVL
|
#ifdef HW_RVL
|
||||||
@ -46,11 +48,14 @@ void Power_Off(void)
|
|||||||
***************************************************************************/
|
***************************************************************************/
|
||||||
static void load_bios()
|
static void load_bios()
|
||||||
{
|
{
|
||||||
|
char pathname[MAXPATHLEN];
|
||||||
|
|
||||||
/* reset BIOS found flag */
|
/* reset BIOS found flag */
|
||||||
config.bios_enabled &= ~2;
|
config.bios_enabled &= ~2;
|
||||||
|
|
||||||
/* open file */
|
/* open file */
|
||||||
FILE *fp = fopen("/genplus/BIOS.bin", "rb");
|
sprintf (pathname, "%s/BIOS.bin", DEFAULT_PATH);
|
||||||
|
FILE *fp = fopen(pathname, "rb");
|
||||||
if (fp == NULL) return;
|
if (fp == NULL) return;
|
||||||
|
|
||||||
/* read file */
|
/* read file */
|
||||||
@ -113,7 +118,7 @@ void reloadrom ()
|
|||||||
***************************************************************************/
|
***************************************************************************/
|
||||||
int FramesPerSecond = 0;
|
int FramesPerSecond = 0;
|
||||||
int frameticker = 0;
|
int frameticker = 0;
|
||||||
bool use_FAT = 0;
|
bool fat_enabled = 0;
|
||||||
|
|
||||||
int main (int argc, char *argv[])
|
int main (int argc, char *argv[])
|
||||||
{
|
{
|
||||||
@ -147,7 +152,7 @@ int main (int argc, char *argv[])
|
|||||||
/* Initialize FAT Interface */
|
/* Initialize FAT Interface */
|
||||||
if (fatInitDefault() == true)
|
if (fatInitDefault() == true)
|
||||||
{
|
{
|
||||||
use_FAT = 1;
|
fat_enabled = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Default Config */
|
/* Default Config */
|
||||||
|
@ -77,9 +77,9 @@ static int held_cnt = 0;
|
|||||||
|
|
||||||
static u32 wpad_dirmap[3][4] =
|
static u32 wpad_dirmap[3][4] =
|
||||||
{
|
{
|
||||||
{WPAD_BUTTON_RIGHT, WPAD_BUTTON_LEFT, WPAD_BUTTON_UP, WPAD_BUTTON_DOWN}, // WIIMOTE only
|
{WPAD_BUTTON_RIGHT, WPAD_BUTTON_LEFT, WPAD_BUTTON_UP, WPAD_BUTTON_DOWN}, /* WIIMOTE only */
|
||||||
{WPAD_BUTTON_UP, WPAD_BUTTON_DOWN, WPAD_BUTTON_LEFT, WPAD_BUTTON_RIGHT}, // WIIMOTE + NUNCHUK
|
{WPAD_BUTTON_UP, WPAD_BUTTON_DOWN, WPAD_BUTTON_LEFT, WPAD_BUTTON_RIGHT}, /* WIIMOTE + NUNCHUK */
|
||||||
{WPAD_CLASSIC_BUTTON_UP, WPAD_CLASSIC_BUTTON_DOWN, WPAD_CLASSIC_BUTTON_LEFT, WPAD_CLASSIC_BUTTON_RIGHT} // CLASSIC
|
{WPAD_CLASSIC_BUTTON_UP, WPAD_CLASSIC_BUTTON_DOWN, WPAD_CLASSIC_BUTTON_LEFT, WPAD_CLASSIC_BUTTON_RIGHT} /* CLASSIC */
|
||||||
};
|
};
|
||||||
|
|
||||||
/* wiimote/expansion available buttons */
|
/* wiimote/expansion available buttons */
|
||||||
|
@ -10,7 +10,6 @@
|
|||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <malloc.h>
|
#include <malloc.h>
|
||||||
#include <fat.h>
|
|
||||||
#include <sys/dir.h>
|
#include <sys/dir.h>
|
||||||
|
|
||||||
#include "ogc_input.h"
|
#include "ogc_input.h"
|
||||||
@ -19,6 +18,8 @@
|
|||||||
#include "config.h"
|
#include "config.h"
|
||||||
#include "history.h"
|
#include "history.h"
|
||||||
|
|
||||||
|
#define DEFAULT_PATH "/genplus"
|
||||||
|
|
||||||
#define update_input() ogc_input__update()
|
#define update_input() ogc_input__update()
|
||||||
|
|
||||||
/* globals */
|
/* globals */
|
||||||
|
@ -763,12 +763,8 @@ static inline void vdp_reg_w(unsigned int r, unsigned int d)
|
|||||||
reg[r] = d;
|
reg[r] = d;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
unsigned int vdp_ctrl_r(void)
|
|
||||||
{
|
|
||||||
/*
|
/*
|
||||||
* Return vdp status
|
* Return VDP status
|
||||||
*
|
*
|
||||||
* Bits are
|
* Bits are
|
||||||
* 0 0:1 ntsc:pal
|
* 0 0:1 ntsc:pal
|
||||||
@ -783,6 +779,8 @@ unsigned int vdp_ctrl_r(void)
|
|||||||
* 9 Write FIFO empty
|
* 9 Write FIFO empty
|
||||||
* 10 - 15 Next word on bus
|
* 10 - 15 Next word on bus
|
||||||
*/
|
*/
|
||||||
|
unsigned int vdp_ctrl_r(void)
|
||||||
|
{
|
||||||
|
|
||||||
/* update FIFO flags */
|
/* update FIFO flags */
|
||||||
fifo_update();
|
fifo_update();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user